Browse Source

create pgraphnodes directory; move some things there from pgraph

David Rose 17 years ago
parent
commit
075710bced
54 changed files with 385 additions and 157 deletions
  1. 1 1
      panda/metalibs/panda/Sources.pp
  2. 1 1
      panda/src/display/Sources.pp
  3. 3 0
      panda/src/pandabase/pandasymbols.h
  4. 12 36
      panda/src/pgraph/Sources.pp
  5. 4 28
      panda/src/pgraph/config_pgraph.cxx
  6. 6 29
      panda/src/pgraph/cullableObject.cxx
  7. 11 0
      panda/src/pgraph/light.cxx
  8. 1 0
      panda/src/pgraph/light.h
  9. 2 3
      panda/src/pgraph/lightAttrib.cxx
  10. 11 0
      panda/src/pgraph/pandaNode.cxx
  11. 1 0
      panda/src/pgraph/pandaNode.h
  12. 0 1
      panda/src/pgraph/pgraph_composite1.cxx
  13. 0 1
      panda/src/pgraph/pgraph_composite2.cxx
  14. 1 4
      panda/src/pgraph/pgraph_composite3.cxx
  15. 1 5
      panda/src/pgraph/pgraph_composite4.cxx
  16. 2 2
      panda/src/pgraph/renderState.cxx
  17. 14 0
      panda/src/pgraph/shaderGeneratorBase.I
  18. 56 0
      panda/src/pgraph/shaderGeneratorBase.cxx
  19. 59 0
      panda/src/pgraph/shaderGeneratorBase.h
  20. 55 0
      panda/src/pgraphnodes/Sources.pp
  21. 0 0
      panda/src/pgraphnodes/ambientLight.I
  22. 11 0
      panda/src/pgraphnodes/ambientLight.cxx
  23. 2 1
      panda/src/pgraphnodes/ambientLight.h
  24. 75 0
      panda/src/pgraphnodes/config_pgraphnodes.cxx
  25. 27 0
      panda/src/pgraphnodes/config_pgraphnodes.h
  26. 0 0
      panda/src/pgraphnodes/directionalLight.I
  27. 0 0
      panda/src/pgraphnodes/directionalLight.cxx
  28. 2 2
      panda/src/pgraphnodes/directionalLight.h
  29. 0 0
      panda/src/pgraphnodes/lightLensNode.I
  30. 0 0
      panda/src/pgraphnodes/lightLensNode.cxx
  31. 1 1
      panda/src/pgraphnodes/lightLensNode.h
  32. 0 0
      panda/src/pgraphnodes/lightNode.I
  33. 0 0
      panda/src/pgraphnodes/lightNode.cxx
  34. 1 1
      panda/src/pgraphnodes/lightNode.h
  35. 6 0
      panda/src/pgraphnodes/pgraphnodes_composite1.cxx
  36. 5 0
      panda/src/pgraphnodes/pgraphnodes_composite2.cxx
  37. 0 0
      panda/src/pgraphnodes/pointLight.I
  38. 0 0
      panda/src/pgraphnodes/pointLight.cxx
  39. 2 2
      panda/src/pgraphnodes/pointLight.h
  40. 0 0
      panda/src/pgraphnodes/selectiveChildNode.I
  41. 0 0
      panda/src/pgraphnodes/selectiveChildNode.cxx
  42. 1 1
      panda/src/pgraphnodes/selectiveChildNode.h
  43. 0 0
      panda/src/pgraphnodes/sequenceNode.I
  44. 0 0
      panda/src/pgraphnodes/sequenceNode.cxx
  45. 1 1
      panda/src/pgraphnodes/sequenceNode.h
  46. 0 0
      panda/src/pgraphnodes/shaderGenerator.I
  47. 0 24
      panda/src/pgraphnodes/shaderGenerator.cxx
  48. 6 9
      panda/src/pgraphnodes/shaderGenerator.h
  49. 0 0
      panda/src/pgraphnodes/spotlight.I
  50. 0 0
      panda/src/pgraphnodes/spotlight.cxx
  51. 2 2
      panda/src/pgraphnodes/spotlight.h
  52. 0 0
      panda/src/pgraphnodes/switchNode.I
  53. 0 0
      panda/src/pgraphnodes/switchNode.cxx
  54. 2 2
      panda/src/pgraphnodes/switchNode.h

+ 1 - 1
panda/metalibs/panda/Sources.pp

@@ -9,7 +9,7 @@
 #define USE_PACKAGES net
 #define USE_PACKAGES net
 
 
 #define COMPONENT_LIBS \
 #define COMPONENT_LIBS \
-    recorder pgraph pipeline \
+    recorder pgraph pgraphnodes pipeline \
     pvrpn grutil chan pstatclient \
     pvrpn grutil chan pstatclient \
     char chat collide cull device \
     char chat collide cull device \
     dgraph display event gobj graph gsgbase \
     dgraph display event gobj graph gsgbase \

+ 1 - 1
panda/src/display/Sources.pp

@@ -5,7 +5,7 @@
 #begin lib_target
 #begin lib_target
   #define TARGET display
   #define TARGET display
   #define LOCAL_LIBS \
   #define LOCAL_LIBS \
-    pgraph cull putil gsgbase gobj linmath mathutil \
+    pgraph pgraphnodes cull putil gsgbase gobj linmath mathutil \
     pstatclient
     pstatclient
 
 
   #define COMBINED_SOURCES $[TARGET]_composite1.cxx $[TARGET]_composite2.cxx 
   #define COMBINED_SOURCES $[TARGET]_composite1.cxx $[TARGET]_composite2.cxx 

+ 3 - 0
panda/src/pandabase/pandasymbols.h

@@ -318,6 +318,9 @@
 #define EXPCL_PANDA_PGRAPH EXPCL_PANDA
 #define EXPCL_PANDA_PGRAPH EXPCL_PANDA
 #define EXPTP_PANDA_PGRAPH EXPTP_PANDA
 #define EXPTP_PANDA_PGRAPH EXPTP_PANDA
 
 
+#define EXPCL_PANDA_PGRAPHNODES EXPCL_PANDA
+#define EXPTP_PANDA_PGRAPHNODES EXPTP_PANDA
+
 #define EXPCL_PANDA_RECORDER EXPCL_PANDA
 #define EXPCL_PANDA_RECORDER EXPCL_PANDA
 #define EXPTP_PANDA_RECORDER EXPTP_PANDA
 #define EXPTP_PANDA_RECORDER EXPTP_PANDA
 
 

+ 12 - 36
panda/src/pgraph/Sources.pp

@@ -15,7 +15,6 @@
   #define SOURCES \
   #define SOURCES \
     accumulatedAttribs.I accumulatedAttribs.h \
     accumulatedAttribs.I accumulatedAttribs.h \
     alphaTestAttrib.I alphaTestAttrib.h \  
     alphaTestAttrib.I alphaTestAttrib.h \  
-    ambientLight.I ambientLight.h \
     antialiasAttrib.I antialiasAttrib.h \
     antialiasAttrib.I antialiasAttrib.h \
     attribNodeRegistry.I attribNodeRegistry.h \
     attribNodeRegistry.I attribNodeRegistry.h \
     attribSlots.h attribSlots.I \
     attribSlots.h attribSlots.I \
@@ -48,10 +47,10 @@
     depthOffsetAttrib.I depthOffsetAttrib.h \
     depthOffsetAttrib.I depthOffsetAttrib.h \
     depthTestAttrib.I depthTestAttrib.h \
     depthTestAttrib.I depthTestAttrib.h \
     depthWriteAttrib.I depthWriteAttrib.h \
     depthWriteAttrib.I depthWriteAttrib.h \
-    directionalLight.I directionalLight.h \
     drawMaskAttrib.I drawMaskAttrib.h \
     drawMaskAttrib.I drawMaskAttrib.h \
     eventStorePandaNode.I eventStorePandaNode.h \
     eventStorePandaNode.I eventStorePandaNode.h \
-    fadeLodNode.I fadeLodNode.h fadeLodNodeData.h \
+    fadeLodNode.I fadeLodNode.h \
+    fadeLodNodeData.h \
     findApproxLevelEntry.I findApproxLevelEntry.h \
     findApproxLevelEntry.I findApproxLevelEntry.h \
     findApproxPath.I findApproxPath.h \
     findApproxPath.I findApproxPath.h \
     fog.I fog.h \
     fog.I fog.h \
@@ -63,8 +62,6 @@
     light.I light.h \
     light.I light.h \
     lightAttrib.I lightAttrib.h \
     lightAttrib.I lightAttrib.h \
     lightRampAttrib.I lightRampAttrib.h \
     lightRampAttrib.I lightRampAttrib.h \
-    lightLensNode.I lightLensNode.h \
-    lightNode.I lightNode.h \
     loader.I loader.h  \
     loader.I loader.h  \
     loaderFileType.h \
     loaderFileType.h \
     loaderFileTypeBam.h  \
     loaderFileTypeBam.h  \
@@ -85,9 +82,8 @@
     pandaNode.I pandaNode.h \
     pandaNode.I pandaNode.h \
     pandaNodeChain.I pandaNodeChain.h \
     pandaNodeChain.I pandaNodeChain.h \
     planeNode.I planeNode.h \
     planeNode.I planeNode.h \
-    pointLight.I pointLight.h \
-    polylightNode.I polylightNode.h \
     polylightEffect.I polylightEffect.h \
     polylightEffect.I polylightEffect.h \
+    polylightNode.I polylightNode.h \
     portalNode.I portalNode.h \
     portalNode.I portalNode.h \
     portalClipper.I portalClipper.h \
     portalClipper.I portalClipper.h \
     renderAttrib.I renderAttrib.h \
     renderAttrib.I renderAttrib.h \
@@ -101,18 +97,14 @@
     sceneSetup.I sceneSetup.h \
     sceneSetup.I sceneSetup.h \
     scissorAttrib.I scissorAttrib.h \
     scissorAttrib.I scissorAttrib.h \
     scissorEffect.I scissorEffect.h \
     scissorEffect.I scissorEffect.h \
-    selectiveChildNode.I selectiveChildNode.h \
-    sequenceNode.I sequenceNode.h \
     shadeModelAttrib.I shadeModelAttrib.h \
     shadeModelAttrib.I shadeModelAttrib.h \
     shaderAttrib.I shaderAttrib.h \
     shaderAttrib.I shaderAttrib.h \
-    shaderGenerator.I shaderGenerator.h \
+    shaderGeneratorBase.I shaderGeneratorBase.h \
     shaderInput.I shaderInput.h \
     shaderInput.I shaderInput.h \
     shaderPool.I shaderPool.h \
     shaderPool.I shaderPool.h \
     showBoundsEffect.I showBoundsEffect.h \
     showBoundsEffect.I showBoundsEffect.h \
-    spotlight.I spotlight.h \
     stateMunger.I stateMunger.h \
     stateMunger.I stateMunger.h \
     stencilAttrib.I stencilAttrib.h \
     stencilAttrib.I stencilAttrib.h \
-    switchNode.I switchNode.h \
     texMatrixAttrib.I texMatrixAttrib.h \
     texMatrixAttrib.I texMatrixAttrib.h \
     texProjectorEffect.I texProjectorEffect.h \
     texProjectorEffect.I texProjectorEffect.h \
     textureAttrib.I textureAttrib.h \
     textureAttrib.I textureAttrib.h \
@@ -130,7 +122,6 @@
   #define INCLUDED_SOURCES \
   #define INCLUDED_SOURCES \
     accumulatedAttribs.cxx \
     accumulatedAttribs.cxx \
     alphaTestAttrib.cxx \  
     alphaTestAttrib.cxx \  
-    ambientLight.cxx \
     antialiasAttrib.cxx \
     antialiasAttrib.cxx \
     attribNodeRegistry.cxx \
     attribNodeRegistry.cxx \
     attribSlots.cxx \
     attribSlots.cxx \
@@ -161,10 +152,10 @@
     depthOffsetAttrib.cxx \
     depthOffsetAttrib.cxx \
     depthTestAttrib.cxx \
     depthTestAttrib.cxx \
     depthWriteAttrib.cxx \
     depthWriteAttrib.cxx \
-    directionalLight.cxx \
     drawMaskAttrib.cxx \
     drawMaskAttrib.cxx \
     eventStorePandaNode.cxx \
     eventStorePandaNode.cxx \
-    fadeLodNode.cxx fadeLodNodeData.cxx \
+    fadeLodNode.cxx \
+    fadeLodNodeData.cxx \
     findApproxLevelEntry.cxx \
     findApproxLevelEntry.cxx \
     findApproxPath.cxx \
     findApproxPath.cxx \
     fog.cxx \
     fog.cxx \
@@ -176,8 +167,6 @@
     light.cxx \
     light.cxx \
     lightAttrib.cxx \
     lightAttrib.cxx \
     lightRampAttrib.cxx \
     lightRampAttrib.cxx \
-    lightLensNode.cxx \
-    lightNode.cxx \
     loader.cxx \
     loader.cxx \
     loaderFileType.cxx  \
     loaderFileType.cxx  \
     loaderFileTypeBam.cxx \
     loaderFileTypeBam.cxx \
@@ -197,9 +186,8 @@
     pandaNode.cxx \
     pandaNode.cxx \
     pandaNodeChain.cxx \
     pandaNodeChain.cxx \
     planeNode.cxx \
     planeNode.cxx \
-    pointLight.cxx \
-    polylightNode.cxx \
     polylightEffect.cxx \
     polylightEffect.cxx \
+    polylightNode.cxx \
     portalNode.cxx \
     portalNode.cxx \
     portalClipper.cxx \
     portalClipper.cxx \
     renderAttrib.cxx \
     renderAttrib.cxx \
@@ -213,18 +201,14 @@
     sceneSetup.cxx \
     sceneSetup.cxx \
     scissorAttrib.cxx \
     scissorAttrib.cxx \
     scissorEffect.cxx \
     scissorEffect.cxx \
-    selectiveChildNode.cxx \
-    sequenceNode.cxx \
     shadeModelAttrib.cxx \
     shadeModelAttrib.cxx \
     shaderAttrib.cxx \
     shaderAttrib.cxx \
-    shaderGenerator.cxx \
+    shaderGeneratorBase.cxx \
     shaderInput.cxx \
     shaderInput.cxx \
     shaderPool.cxx \
     shaderPool.cxx \
     showBoundsEffect.cxx \
     showBoundsEffect.cxx \
-    spotlight.cxx \
     stateMunger.cxx \
     stateMunger.cxx \
     stencilAttrib.cxx \
     stencilAttrib.cxx \
-    switchNode.cxx \
     texMatrixAttrib.cxx \
     texMatrixAttrib.cxx \
     texProjectorEffect.cxx \
     texProjectorEffect.cxx \
     textureAttrib.cxx \
     textureAttrib.cxx \
@@ -239,7 +223,6 @@
   #define INSTALL_HEADERS \
   #define INSTALL_HEADERS \
     accumulatedAttribs.I accumulatedAttribs.h \
     accumulatedAttribs.I accumulatedAttribs.h \
     alphaTestAttrib.I alphaTestAttrib.h \  
     alphaTestAttrib.I alphaTestAttrib.h \  
-    ambientLight.I ambientLight.h \
     antialiasAttrib.I antialiasAttrib.h \
     antialiasAttrib.I antialiasAttrib.h \
     attribNodeRegistry.I attribNodeRegistry.h \
     attribNodeRegistry.I attribNodeRegistry.h \
     attribSlots.h attribSlots.I \
     attribSlots.h attribSlots.I \
@@ -272,10 +255,10 @@
     depthOffsetAttrib.I depthOffsetAttrib.h \
     depthOffsetAttrib.I depthOffsetAttrib.h \
     depthTestAttrib.I depthTestAttrib.h \
     depthTestAttrib.I depthTestAttrib.h \
     depthWriteAttrib.I depthWriteAttrib.h \
     depthWriteAttrib.I depthWriteAttrib.h \
-    directionalLight.I directionalLight.h \
     drawMaskAttrib.I drawMaskAttrib.h \
     drawMaskAttrib.I drawMaskAttrib.h \
     eventStorePandaNode.I eventStorePandaNode.h \
     eventStorePandaNode.I eventStorePandaNode.h \
-    fadeLodNode.I fadeLodNode.h fadeLodNodeData.h \
+    fadeLodNode.I fadeLodNode.h \
+    fadeLodNodeData.h \
     fog.I fog.h \
     fog.I fog.h \
     fogAttrib.I fogAttrib.h \
     fogAttrib.I fogAttrib.h \
     geomNode.I geomNode.h \
     geomNode.I geomNode.h \
@@ -285,8 +268,6 @@
     light.I light.h \
     light.I light.h \
     lightAttrib.I lightAttrib.h \
     lightAttrib.I lightAttrib.h \
     lightRampAttrib.I lightRampAttrib.h \
     lightRampAttrib.I lightRampAttrib.h \
-    lightLensNode.I lightLensNode.h \
-    lightNode.I lightNode.h \
     loader.I loader.h \
     loader.I loader.h \
     loaderFileType.h \
     loaderFileType.h \
     loaderFileTypeBam.h \
     loaderFileTypeBam.h \
@@ -307,9 +288,8 @@
     pandaNode.I pandaNode.h \
     pandaNode.I pandaNode.h \
     pandaNodeChain.I pandaNodeChain.h \
     pandaNodeChain.I pandaNodeChain.h \
     planeNode.I planeNode.h \
     planeNode.I planeNode.h \
-    pointLight.I pointLight.h \
-    polylightNode.I polylightNode.h \
     polylightEffect.I polylightEffect.h \
     polylightEffect.I polylightEffect.h \
+    polylightNode.I polylightNode.h \
     portalNode.I portalNode.h \
     portalNode.I portalNode.h \
     portalClipper.I portalClipper.h \
     portalClipper.I portalClipper.h \
     renderAttrib.I renderAttrib.h \
     renderAttrib.I renderAttrib.h \
@@ -323,18 +303,14 @@
     sceneSetup.I sceneSetup.h \
     sceneSetup.I sceneSetup.h \
     scissorAttrib.I scissorAttrib.h \
     scissorAttrib.I scissorAttrib.h \
     scissorEffect.I scissorEffect.h \
     scissorEffect.I scissorEffect.h \
-    selectiveChildNode.I selectiveChildNode.h \
-    sequenceNode.I sequenceNode.h \
     shadeModelAttrib.I shadeModelAttrib.h \
     shadeModelAttrib.I shadeModelAttrib.h \
     shaderAttrib.I shaderAttrib.h \
     shaderAttrib.I shaderAttrib.h \
-    shaderGenerator.I shaderGenerator.h \
+    shaderGeneratorBase.I shaderGeneratorBase.h \
     shaderInput.I shaderInput.h \
     shaderInput.I shaderInput.h \
     shaderPool.I shaderPool.h \
     shaderPool.I shaderPool.h \
     showBoundsEffect.I showBoundsEffect.h \
     showBoundsEffect.I showBoundsEffect.h \
-    spotlight.I spotlight.h \
     stateMunger.I stateMunger.h \
     stateMunger.I stateMunger.h \
     stencilAttrib.I stencilAttrib.h \
     stencilAttrib.I stencilAttrib.h \
-    switchNode.I switchNode.h \
     texMatrixAttrib.I texMatrixAttrib.h \
     texMatrixAttrib.I texMatrixAttrib.h \
     texProjectorEffect.I texProjectorEffect.h \
     texProjectorEffect.I texProjectorEffect.h \
     textureAttrib.I textureAttrib.h \
     textureAttrib.I textureAttrib.h \

+ 4 - 28
panda/src/pgraph/config_pgraph.cxx

@@ -17,7 +17,6 @@
 #include "alphaTestAttrib.h"
 #include "alphaTestAttrib.h"
 #include "audioVolumeAttrib.h"
 #include "audioVolumeAttrib.h"
 #include "auxBitplaneAttrib.h"
 #include "auxBitplaneAttrib.h"
-#include "ambientLight.h"
 #include "antialiasAttrib.h"
 #include "antialiasAttrib.h"
 #include "auxSceneData.h"
 #include "auxSceneData.h"
 #include "billboardEffect.h"
 #include "billboardEffect.h"
@@ -37,12 +36,11 @@
 #include "depthOffsetAttrib.h"
 #include "depthOffsetAttrib.h"
 #include "depthTestAttrib.h"
 #include "depthTestAttrib.h"
 #include "depthWriteAttrib.h"
 #include "depthWriteAttrib.h"
-#include "directionalLight.h"
 #include "drawMaskAttrib.h"
 #include "drawMaskAttrib.h"
 #include "eventStorePandaNode.h"
 #include "eventStorePandaNode.h"
+#include "findApproxLevelEntry.h"
 #include "fadeLodNode.h"
 #include "fadeLodNode.h"
 #include "fadeLodNodeData.h"
 #include "fadeLodNodeData.h"
-#include "findApproxLevelEntry.h"
 #include "fog.h"
 #include "fog.h"
 #include "fogAttrib.h"
 #include "fogAttrib.h"
 #include "geomNode.h"
 #include "geomNode.h"
@@ -51,8 +49,6 @@
 #include "light.h"
 #include "light.h"
 #include "lightAttrib.h"
 #include "lightAttrib.h"
 #include "lightRampAttrib.h"
 #include "lightRampAttrib.h"
-#include "lightLensNode.h"
-#include "lightNode.h"
 #include "loader.h"
 #include "loader.h"
 #include "loaderFileType.h"
 #include "loaderFileType.h"
 #include "loaderFileTypeBam.h"
 #include "loaderFileTypeBam.h"
@@ -67,9 +63,8 @@
 #include "nodePathComponent.h"
 #include "nodePathComponent.h"
 #include "pandaNode.h"
 #include "pandaNode.h"
 #include "planeNode.h"
 #include "planeNode.h"
-#include "pointLight.h"
-#include "polylightNode.h"
 #include "polylightEffect.h"
 #include "polylightEffect.h"
+#include "polylightNode.h"
 #include "portalNode.h"
 #include "portalNode.h"
 #include "portalClipper.h"
 #include "portalClipper.h"
 #include "renderAttrib.h"
 #include "renderAttrib.h"
@@ -78,8 +73,6 @@
 #include "renderModeAttrib.h"
 #include "renderModeAttrib.h"
 #include "renderState.h"
 #include "renderState.h"
 #include "rescaleNormalAttrib.h"
 #include "rescaleNormalAttrib.h"
-#include "selectiveChildNode.h"
-#include "sequenceNode.h"
 #include "scissorAttrib.h"
 #include "scissorAttrib.h"
 #include "scissorEffect.h"
 #include "scissorEffect.h"
 #include "shadeModelAttrib.h"
 #include "shadeModelAttrib.h"
@@ -88,9 +81,7 @@
 #include "shader.h"
 #include "shader.h"
 #include "showBoundsEffect.h"
 #include "showBoundsEffect.h"
 #include "stencilAttrib.h"
 #include "stencilAttrib.h"
-#include "spotlight.h"
 #include "stateMunger.h"
 #include "stateMunger.h"
-#include "switchNode.h"
 #include "texMatrixAttrib.h"
 #include "texMatrixAttrib.h"
 #include "texProjectorEffect.h"
 #include "texProjectorEffect.h"
 #include "textureAttrib.h"
 #include "textureAttrib.h"
@@ -98,7 +89,7 @@
 #include "transformState.h"
 #include "transformState.h"
 #include "transparencyAttrib.h"
 #include "transparencyAttrib.h"
 #include "nodePathLerps.h"
 #include "nodePathLerps.h"
-#include "shaderGenerator.h"
+#include "shaderGeneratorBase.h"
 
 
 #include "dconfig.h"
 #include "dconfig.h"
 
 
@@ -379,7 +370,6 @@ init_libpgraph() {
   initialized = true;
   initialized = true;
 
 
   AlphaTestAttrib::init_type();
   AlphaTestAttrib::init_type();
-  AmbientLight::init_type();
   AntialiasAttrib::init_type();
   AntialiasAttrib::init_type();
   AudioVolumeAttrib::init_type();
   AudioVolumeAttrib::init_type();
   AuxBitplaneAttrib::init_type();
   AuxBitplaneAttrib::init_type();
@@ -401,7 +391,6 @@ init_libpgraph() {
   DepthOffsetAttrib::init_type();
   DepthOffsetAttrib::init_type();
   DepthTestAttrib::init_type();
   DepthTestAttrib::init_type();
   DepthWriteAttrib::init_type();
   DepthWriteAttrib::init_type();
-  DirectionalLight::init_type();
   DrawMaskAttrib::init_type();
   DrawMaskAttrib::init_type();
   EventStorePandaNode::init_type();
   EventStorePandaNode::init_type();
   FadeLODNode::init_type();
   FadeLODNode::init_type();
@@ -415,8 +404,6 @@ init_libpgraph() {
   Light::init_type();
   Light::init_type();
   LightAttrib::init_type();
   LightAttrib::init_type();
   LightRampAttrib::init_type();
   LightRampAttrib::init_type();
-  LightLensNode::init_type();
-  LightNode::init_type();
   Loader::init_type();
   Loader::init_type();
   LODNode::init_type();
   LODNode::init_type();
   LoaderFileType::init_type();
   LoaderFileType::init_type();
@@ -431,7 +418,6 @@ init_libpgraph() {
   PandaNode::init_type();
   PandaNode::init_type();
   PandaNodePipelineReader::init_type();
   PandaNodePipelineReader::init_type();
   PlaneNode::init_type();
   PlaneNode::init_type();
-  PointLight::init_type();
   PolylightNode::init_type();
   PolylightNode::init_type();
   PolylightEffect::init_type();
   PolylightEffect::init_type();
   PortalNode::init_type();
   PortalNode::init_type();
@@ -442,19 +428,15 @@ init_libpgraph() {
   RenderModeAttrib::init_type();
   RenderModeAttrib::init_type();
   RenderState::init_type();
   RenderState::init_type();
   RescaleNormalAttrib::init_type();
   RescaleNormalAttrib::init_type();
-  SelectiveChildNode::init_type();
-  SequenceNode::init_type();
   ScissorAttrib::init_type();
   ScissorAttrib::init_type();
   ScissorEffect::init_type();
   ScissorEffect::init_type();
   ShadeModelAttrib::init_type();
   ShadeModelAttrib::init_type();
   ShaderInput::init_type();
   ShaderInput::init_type();
   ShaderAttrib::init_type();
   ShaderAttrib::init_type();
-  ShaderGenerator::init_type();
+  ShaderGeneratorBase::init_type();
   ShowBoundsEffect::init_type();
   ShowBoundsEffect::init_type();
-  Spotlight::init_type();
   StateMunger::init_type();
   StateMunger::init_type();
   StencilAttrib::init_type();
   StencilAttrib::init_type();
-  SwitchNode::init_type();
   TexMatrixAttrib::init_type();
   TexMatrixAttrib::init_type();
   TexProjectorEffect::init_type();
   TexProjectorEffect::init_type();
   TextureAttrib::init_type();
   TextureAttrib::init_type();
@@ -471,7 +453,6 @@ init_libpgraph() {
   ColorScaleLerpFunctor::init_type();
   ColorScaleLerpFunctor::init_type();
 
 
   AlphaTestAttrib::register_with_read_factory();
   AlphaTestAttrib::register_with_read_factory();
-  AmbientLight::register_with_read_factory();
   AntialiasAttrib::register_with_read_factory();
   AntialiasAttrib::register_with_read_factory();
   AudioVolumeAttrib::register_with_read_factory();
   AudioVolumeAttrib::register_with_read_factory();
   AuxBitplaneAttrib::register_with_read_factory();
   AuxBitplaneAttrib::register_with_read_factory();
@@ -489,7 +470,6 @@ init_libpgraph() {
   DepthOffsetAttrib::register_with_read_factory();
   DepthOffsetAttrib::register_with_read_factory();
   DepthTestAttrib::register_with_read_factory();
   DepthTestAttrib::register_with_read_factory();
   DepthWriteAttrib::register_with_read_factory();
   DepthWriteAttrib::register_with_read_factory();
-  DirectionalLight::register_with_read_factory();
   DrawMaskAttrib::register_with_read_factory();
   DrawMaskAttrib::register_with_read_factory();
   FadeLODNode::register_with_read_factory();
   FadeLODNode::register_with_read_factory();
   Fog::register_with_read_factory();
   Fog::register_with_read_factory();
@@ -504,14 +484,12 @@ init_libpgraph() {
   ModelRoot::register_with_read_factory();
   ModelRoot::register_with_read_factory();
   PandaNode::register_with_read_factory();
   PandaNode::register_with_read_factory();
   PlaneNode::register_with_read_factory();
   PlaneNode::register_with_read_factory();
-  PointLight::register_with_read_factory();
   PolylightNode::register_with_read_factory();
   PolylightNode::register_with_read_factory();
   PortalNode::register_with_read_factory();
   PortalNode::register_with_read_factory();
   RenderEffects::register_with_read_factory();
   RenderEffects::register_with_read_factory();
   RenderModeAttrib::register_with_read_factory();
   RenderModeAttrib::register_with_read_factory();
   RenderState::register_with_read_factory();
   RenderState::register_with_read_factory();
   RescaleNormalAttrib::register_with_read_factory();
   RescaleNormalAttrib::register_with_read_factory();
-  SequenceNode::register_with_read_factory();
   ScissorAttrib::register_with_read_factory();
   ScissorAttrib::register_with_read_factory();
   ScissorEffect::register_with_read_factory();
   ScissorEffect::register_with_read_factory();
   ShadeModelAttrib::register_with_read_factory();
   ShadeModelAttrib::register_with_read_factory();
@@ -519,8 +497,6 @@ init_libpgraph() {
   ShaderAttrib::register_with_read_factory();
   ShaderAttrib::register_with_read_factory();
   Shader::register_with_read_factory();
   Shader::register_with_read_factory();
   ShowBoundsEffect::register_with_read_factory();
   ShowBoundsEffect::register_with_read_factory();
-  Spotlight::register_with_read_factory();
-  SwitchNode::register_with_read_factory();
   TexMatrixAttrib::register_with_read_factory();
   TexMatrixAttrib::register_with_read_factory();
   TexProjectorEffect::register_with_read_factory();
   TexProjectorEffect::register_with_read_factory();
   TextureAttrib::register_with_read_factory();
   TextureAttrib::register_with_read_factory();

+ 6 - 29
panda/src/pgraph/cullableObject.cxx

@@ -13,11 +13,8 @@
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 
 
 #include "cullableObject.h"
 #include "cullableObject.h"
-#include "ambientLight.h"
 #include "lightAttrib.h"
 #include "lightAttrib.h"
 #include "nodePath.h"
 #include "nodePath.h"
-#include "material.h"
-#include "materialAttrib.h"
 #include "texGenAttrib.h"
 #include "texGenAttrib.h"
 #include "renderState.h"
 #include "renderState.h"
 #include "clockObject.h"
 #include "clockObject.h"
@@ -701,20 +698,10 @@ get_flash_cpu_state() {
   // and never free it.
   // and never free it.
   static CPT(RenderState) flash_cpu_state = (const RenderState *)NULL;
   static CPT(RenderState) flash_cpu_state = (const RenderState *)NULL;
   if (flash_cpu_state == (const RenderState *)NULL) {
   if (flash_cpu_state == (const RenderState *)NULL) {
-    PT(AmbientLight) ambient_light = new AmbientLight("alight");
-    ambient_light->set_color(Colorf(1.0f, 1.0f, 1.0f, 1.0f));
-    NodePath alight(ambient_light);
-
-    CPT(LightAttrib) light_attrib = DCAST(LightAttrib, LightAttrib::make_all_off());
-    light_attrib = DCAST(LightAttrib, light_attrib->add_on_light(alight));
-
-    PT(Material) material = new Material;
-    material->set_ambient(flash_cpu_color);
-    material->set_diffuse(flash_cpu_color);
-
     flash_cpu_state = RenderState::make
     flash_cpu_state = RenderState::make
-      (light_attrib, 
-       MaterialAttrib::make(material));
+      (LightAttrib::make_all_off(),
+       TextureAttrib::make_off(),
+       ColorAttrib::make_flat(flash_cpu_color));
   }
   }
 
 
   return flash_cpu_state;
   return flash_cpu_state;
@@ -735,20 +722,10 @@ get_flash_hardware_state() {
   // and never free it.
   // and never free it.
   static CPT(RenderState) flash_hardware_state = (const RenderState *)NULL;
   static CPT(RenderState) flash_hardware_state = (const RenderState *)NULL;
   if (flash_hardware_state == (const RenderState *)NULL) {
   if (flash_hardware_state == (const RenderState *)NULL) {
-    PT(AmbientLight) ambient_light = new AmbientLight("alight");
-    ambient_light->set_color(Colorf(1.0f, 1.0f, 1.0f, 1.0f));
-    NodePath alight(ambient_light);
-
-    CPT(LightAttrib) light_attrib = DCAST(LightAttrib, LightAttrib::make_all_off());
-    light_attrib = DCAST(LightAttrib, light_attrib->add_on_light(alight));
-
-    PT(Material) material = new Material;
-    material->set_ambient(flash_hardware_color);
-    material->set_diffuse(flash_hardware_color);
-
     flash_hardware_state = RenderState::make
     flash_hardware_state = RenderState::make
-      (light_attrib, 
-       MaterialAttrib::make(material));
+      (LightAttrib::make_all_off(),
+       TextureAttrib::make_off(),
+       ColorAttrib::make_flat(flash_hardware_color));
   }
   }
 
 
   return flash_hardware_state;
   return flash_hardware_state;

+ 11 - 0
panda/src/pgraph/light.cxx

@@ -65,6 +65,17 @@ Light::
 ~Light() {
 ~Light() {
 }
 }
 
 
+////////////////////////////////////////////////////////////////////
+//     Function: Light::is_ambient_light
+//       Access: Published, Virtual
+//  Description: Returns true if this is an AmbientLight, false if it
+//               is some other kind of light.
+////////////////////////////////////////////////////////////////////
+bool Light::
+is_ambient_light() const {
+  return false;
+}
+
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 //     Function: Light::get_vector_to_light
 //     Function: Light::get_vector_to_light
 //       Access: Public, Virtual
 //       Access: Public, Virtual

+ 1 - 0
panda/src/pgraph/light.h

@@ -50,6 +50,7 @@ PUBLISHED:
   virtual ~Light();
   virtual ~Light();
 
 
   virtual PandaNode *as_node()=0;
   virtual PandaNode *as_node()=0;
+  virtual bool is_ambient_light() const;
 
 
   INLINE const Colorf &get_color() const;
   INLINE const Colorf &get_color() const;
   INLINE void set_color(const Colorf &color);
   INLINE void set_color(const Colorf &color);

+ 2 - 3
panda/src/pgraph/lightAttrib.cxx

@@ -14,7 +14,6 @@
 
 
 #include "lightAttrib.h"
 #include "lightAttrib.h"
 #include "attribSlots.h"
 #include "attribSlots.h"
-#include "ambientLight.h"
 #include "pandaNode.h"
 #include "pandaNode.h"
 #include "nodePath.h"
 #include "nodePath.h"
 #include "graphicsStateGuardianBase.h"
 #include "graphicsStateGuardianBase.h"
@@ -506,7 +505,7 @@ filter_to_max(int max_lights) const {
   for (li = _on_lights.begin(); li != _on_lights.end(); ++li) {
   for (li = _on_lights.begin(); li != _on_lights.end(); ++li) {
     const NodePath &np = (*li);
     const NodePath &np = (*li);
     nassertr(!np.is_empty() && np.node()->as_light() != (Light *)NULL, this);
     nassertr(!np.is_empty() && np.node()->as_light() != (Light *)NULL, this);
-    if (np.node()->is_exact_type(AmbientLight::get_class_type())) {
+    if (np.node()->is_ambient_light()) {
       ambient_lights.push_back(np);
       ambient_lights.push_back(np);
     } else {
     } else {
       priority_lights.push_back(np);
       priority_lights.push_back(np);
@@ -562,7 +561,7 @@ get_most_important_light() const {
   for (li = _on_lights.begin(); li != _on_lights.end(); ++li) {
   for (li = _on_lights.begin(); li != _on_lights.end(); ++li) {
     const NodePath &np = (*li);
     const NodePath &np = (*li);
     nassertr(!np.is_empty() && np.node()->as_light() != (Light *)NULL, NodePath());
     nassertr(!np.is_empty() && np.node()->as_light() != (Light *)NULL, NodePath());
-    if (!np.node()->is_exact_type(AmbientLight::get_class_type())) {
+    if (!np.node()->is_ambient_light()) {
       if (best.is_empty() || compare(np, best)) {
       if (best.is_empty() || compare(np, best)) {
         best = np;
         best = np;
       }
       }

+ 11 - 0
panda/src/pgraph/pandaNode.cxx

@@ -2464,6 +2464,17 @@ as_light() {
   return NULL;
   return NULL;
 }
 }
 
 
+////////////////////////////////////////////////////////////////////
+//     Function: PandaNode::is_ambient_light
+//       Access: Published, Virtual
+//  Description: Returns true if this is an AmbientLight, false if it
+//               is not a light, or it is some other kind of light.
+////////////////////////////////////////////////////////////////////
+bool PandaNode::
+is_ambient_light() const {
+  return false;
+}
+
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 //     Function: PandaNode::get_internal_bounds
 //     Function: PandaNode::get_internal_bounds
 //       Access: Protected
 //       Access: Protected

+ 1 - 0
panda/src/pgraph/pandaNode.h

@@ -280,6 +280,7 @@ PUBLISHED:
   virtual bool is_geom_node() const;
   virtual bool is_geom_node() const;
   virtual bool is_lod_node() const;
   virtual bool is_lod_node() const;
   virtual Light *as_light();
   virtual Light *as_light();
+  virtual bool is_ambient_light() const;
 
 
   enum FancyBits {
   enum FancyBits {
     FB_transform            = 0x0001,
     FB_transform            = 0x0001,

+ 0 - 1
panda/src/pgraph/pgraph_composite1.cxx

@@ -1,5 +1,4 @@
 #include "accumulatedAttribs.cxx"
 #include "accumulatedAttribs.cxx"
-#include "ambientLight.cxx"
 #include "antialiasAttrib.cxx"
 #include "antialiasAttrib.cxx"
 #include "attribNodeRegistry.cxx"
 #include "attribNodeRegistry.cxx"
 #include "audioVolumeAttrib.cxx"
 #include "audioVolumeAttrib.cxx"

+ 0 - 1
panda/src/pgraph/pgraph_composite2.cxx

@@ -13,7 +13,6 @@
 #include "depthTestAttrib.cxx"
 #include "depthTestAttrib.cxx"
 #include "depthWriteAttrib.cxx"
 #include "depthWriteAttrib.cxx"
 #include "alphaTestAttrib.cxx"
 #include "alphaTestAttrib.cxx"
-#include "directionalLight.cxx"
 #include "drawMaskAttrib.cxx"
 #include "drawMaskAttrib.cxx"
 #include "eventStorePandaNode.cxx"
 #include "eventStorePandaNode.cxx"
 #include "fadeLodNode.cxx"
 #include "fadeLodNode.cxx"

+ 1 - 4
panda/src/pgraph/pgraph_composite3.cxx

@@ -3,8 +3,6 @@
 #include "light.cxx"
 #include "light.cxx"
 #include "lightAttrib.cxx"
 #include "lightAttrib.cxx"
 #include "lightRampAttrib.cxx"
 #include "lightRampAttrib.cxx"
-#include "lightLensNode.cxx"
-#include "lightNode.cxx"
 #include "loader.cxx"
 #include "loader.cxx"
 #include "loaderFileType.cxx"
 #include "loaderFileType.cxx"
 #include "loaderFileTypeBam.cxx"
 #include "loaderFileTypeBam.cxx"
@@ -24,8 +22,7 @@
 #include "pandaNode.cxx"
 #include "pandaNode.cxx"
 #include "pandaNodeChain.cxx"
 #include "pandaNodeChain.cxx"
 #include "planeNode.cxx"
 #include "planeNode.cxx"
-#include "pointLight.cxx"
-#include "polylightNode.cxx"
 #include "polylightEffect.cxx"
 #include "polylightEffect.cxx"
+#include "polylightNode.cxx"
 #include "portalNode.cxx"
 #include "portalNode.cxx"
 #include "portalClipper.cxx"
 #include "portalClipper.cxx"

+ 1 - 5
panda/src/pgraph/pgraph_composite4.cxx

@@ -6,20 +6,16 @@
 #include "rescaleNormalAttrib.cxx"
 #include "rescaleNormalAttrib.cxx"
 #include "sceneGraphAnalyzer.cxx"
 #include "sceneGraphAnalyzer.cxx"
 #include "sceneGraphReducer.cxx"
 #include "sceneGraphReducer.cxx"
-#include "selectiveChildNode.cxx"
-#include "sequenceNode.cxx"
 #include "scissorAttrib.cxx"
 #include "scissorAttrib.cxx"
 #include "scissorEffect.cxx"
 #include "scissorEffect.cxx"
 #include "shadeModelAttrib.cxx"
 #include "shadeModelAttrib.cxx"
 #include "shaderInput.cxx"
 #include "shaderInput.cxx"
 #include "shaderAttrib.cxx"
 #include "shaderAttrib.cxx"
 #include "shaderPool.cxx"
 #include "shaderPool.cxx"
-#include "shaderGenerator.cxx"
+#include "shaderGeneratorBase.cxx"
 #include "showBoundsEffect.cxx"
 #include "showBoundsEffect.cxx"
-#include "spotlight.cxx"
 #include "stateMunger.cxx"
 #include "stateMunger.cxx"
 #include "stencilAttrib.cxx"
 #include "stencilAttrib.cxx"
-#include "switchNode.cxx"
 #include "texMatrixAttrib.cxx"
 #include "texMatrixAttrib.cxx"
 #include "texProjectorEffect.cxx"
 #include "texProjectorEffect.cxx"
 #include "textureAttrib.cxx"
 #include "textureAttrib.cxx"

+ 2 - 2
panda/src/pgraph/renderState.cxx

@@ -36,7 +36,7 @@
 #include "lightMutexHolder.h"
 #include "lightMutexHolder.h"
 #include "thread.h"
 #include "thread.h"
 #include "attribSlots.h"
 #include "attribSlots.h"
-#include "shaderGenerator.h"
+#include "shaderGeneratorBase.h"
   
   
 LightReMutex *RenderState::_states_lock = NULL;
 LightReMutex *RenderState::_states_lock = NULL;
 RenderState::States *RenderState::_states = NULL;
 RenderState::States *RenderState::_states = NULL;
@@ -1258,7 +1258,7 @@ get_generated_shader() const {
   if (_generated_shader != (RenderAttrib*)NULL) {
   if (_generated_shader != (RenderAttrib*)NULL) {
     return DCAST(ShaderAttrib, _generated_shader);
     return DCAST(ShaderAttrib, _generated_shader);
   }
   }
-  ShaderGenerator *gen = ShaderGenerator::get_default();
+  ShaderGeneratorBase *gen = ShaderGeneratorBase::get_default();
   ((RenderState*)this)->_generated_shader =
   ((RenderState*)this)->_generated_shader =
     gen->synthesize_shader(this);
     gen->synthesize_shader(this);
   return DCAST(ShaderAttrib, _generated_shader);
   return DCAST(ShaderAttrib, _generated_shader);

+ 14 - 0
panda/src/pgraph/shaderGeneratorBase.I

@@ -0,0 +1,14 @@
+// Filename: shaderGeneratorBase.I
+// Created by:  drose (05Nov08)
+//
+////////////////////////////////////////////////////////////////////
+//
+// PANDA 3D SOFTWARE
+// Copyright (c) Carnegie Mellon University.  All rights reserved.
+//
+// All use of this software is subject to the terms of the revised BSD
+// license.  You should have received a copy of this license along
+// with this source code in a file named "LICENSE."
+//
+////////////////////////////////////////////////////////////////////
+

+ 56 - 0
panda/src/pgraph/shaderGeneratorBase.cxx

@@ -0,0 +1,56 @@
+// Filename: shaderGeneratorBase.cxx
+// Created by:  drose (05Nov08)
+//
+////////////////////////////////////////////////////////////////////
+//
+// PANDA 3D SOFTWARE
+// Copyright (c) Carnegie Mellon University.  All rights reserved.
+//
+// All use of this software is subject to the terms of the revised BSD
+// license.  You should have received a copy of this license along
+// with this source code in a file named "LICENSE."
+//
+////////////////////////////////////////////////////////////////////
+
+#include "shaderGeneratorBase.h"
+
+TypeHandle ShaderGeneratorBase::_type_handle;
+PT(ShaderGeneratorBase) ShaderGeneratorBase::_default_generator;
+
+////////////////////////////////////////////////////////////////////
+//     Function: ShaderGeneratorBase::Constructor
+//       Access: Protected
+//  Description: 
+////////////////////////////////////////////////////////////////////
+ShaderGeneratorBase::
+ShaderGeneratorBase() {
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: ShaderGeneratorBase::Destructor
+//       Access: Published, Virtual
+//  Description: 
+////////////////////////////////////////////////////////////////////
+ShaderGeneratorBase::
+~ShaderGeneratorBase() {
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: ShaderGeneratorBase::get_default
+//       Access: Published, Static
+//  Description: Get a pointer to the default shader generator.
+////////////////////////////////////////////////////////////////////
+ShaderGeneratorBase *ShaderGeneratorBase::
+get_default() {
+  return _default_generator;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: ShaderGeneratorBase::set_default
+//       Access: Published, Static
+//  Description: Set the default shader generator.
+////////////////////////////////////////////////////////////////////
+void ShaderGeneratorBase::
+set_default(ShaderGeneratorBase *generator) {
+  _default_generator = generator;
+}

+ 59 - 0
panda/src/pgraph/shaderGeneratorBase.h

@@ -0,0 +1,59 @@
+// Filename: shaderGeneratorBase.h
+// Created by:  drose (05Nov08)
+//
+////////////////////////////////////////////////////////////////////
+//
+// PANDA 3D SOFTWARE
+// Copyright (c) Carnegie Mellon University.  All rights reserved.
+//
+// All use of this software is subject to the terms of the revised BSD
+// license.  You should have received a copy of this license along
+// with this source code in a file named "LICENSE."
+//
+////////////////////////////////////////////////////////////////////
+
+#ifndef SHADERGENERATORBASE_H
+#define SHADERGENERATORBASE_H
+
+#include "pandabase.h"
+#include "typedWritableReferenceCount.h"
+
+////////////////////////////////////////////////////////////////////
+//       Class : ShaderGeneratorBase
+// Description : This is the abstract base class for ShaderGenerator.
+////////////////////////////////////////////////////////////////////
+class EXPCL_PANDA_PGRAPH ShaderGeneratorBase : public TypedWritableReferenceCount {
+private:
+  static PT(ShaderGeneratorBase) _default_generator;
+
+protected:
+  ShaderGeneratorBase();
+
+PUBLISHED:
+  virtual ~ShaderGeneratorBase();
+  static ShaderGeneratorBase *get_default();
+  static void set_default(ShaderGeneratorBase *generator);
+  virtual CPT(RenderAttrib) synthesize_shader(const RenderState *rs)=0;
+  
+public:
+  static TypeHandle get_class_type() {
+    return _type_handle;
+  }
+  static void init_type() {
+    TypedWritableReferenceCount::init_type();
+    register_type(_type_handle, "ShaderGeneratorBase",
+                  TypedWritableReferenceCount::get_class_type());
+  }
+  virtual TypeHandle get_type() const {
+    return get_class_type();
+  }
+  virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
+
+ private:
+  static TypeHandle _type_handle;
+};
+
+#include "shaderGeneratorBase.I"
+
+#endif  // SHADERGENERATORBASE_H
+

+ 55 - 0
panda/src/pgraphnodes/Sources.pp

@@ -0,0 +1,55 @@
+#define OTHER_LIBS interrogatedb:c dconfig:c dtoolconfig:m \
+                   dtoolutil:c dtoolbase:c dtool:m prc:c
+#define LOCAL_LIBS \
+    lerp event gsgbase gobj putil linmath \
+    downloader express pandabase pstatclient pgraph
+#define USE_PACKAGES python
+ 
+#begin lib_target
+  #define TARGET pgraphnodes
+
+  #define COMBINED_SOURCES \
+    $[TARGET]_composite1.cxx $[TARGET]_composite2.cxx
+
+  #define SOURCES \
+    ambientLight.h ambientLight.I \
+    config_pgraphnodes.h \
+    directionalLight.h directionalLight.I \
+    lightLensNode.h lightLensNode.I \
+    lightNode.h lightNode.I \
+    pointLight.h pointLight.I \
+    selectiveChildNode.h selectiveChildNode.I \
+    sequenceNode.h sequenceNode.I \
+    shaderGenerator.h shaderGenerator.I \
+    spotlight.h spotlight.I \
+    switchNode.h switchNode.I
+
+  #define INCLUDED_SOURCES \
+    ambientLight.cxx \
+    config_pgraphnodes.cxx \
+    directionalLight.cxx \
+    lightLensNode.cxx \
+    lightNode.cxx \
+    pointLight.cxx \
+    selectiveChildNode.cxx \
+    sequenceNode.cxx \
+    shaderGenerator.cxx \
+    spotlight.cxx \
+    switchNode.cxx
+
+  #define INSTALL_HEADERS \
+    ambientLight.h ambientLight.I \
+    config_pgraphnodes.h \
+    directionalLight.h directionalLight.I \
+    lightLensNode.h lightLensNode.I \
+    lightNode.h lightNode.I \
+    pointLight.h pointLight.I \
+    selectiveChildNode.h selectiveChildNode.I \
+    sequenceNode.h sequenceNode.I \
+    shaderGenerator.h shaderGenerator.I \
+    spotlight.h spotlight.I \
+    switchNode.h switchNode.I
+
+  #define IGATESCAN all
+
+#end lib_target

+ 0 - 0
panda/src/pgraph/ambientLight.I → panda/src/pgraphnodes/ambientLight.I


+ 11 - 0
panda/src/pgraph/ambientLight.cxx → panda/src/pgraphnodes/ambientLight.cxx

@@ -85,6 +85,17 @@ write(ostream &out, int indent_level) const {
     << "color " << get_color() << "\n";
     << "color " << get_color() << "\n";
 }
 }
 
 
+////////////////////////////////////////////////////////////////////
+//     Function: AmbientLight::is_ambient_light
+//       Access: Published, Virtual
+//  Description: Returns true if this is an AmbientLight, false if it
+//               is some other kind of light.
+////////////////////////////////////////////////////////////////////
+bool AmbientLight::
+is_ambient_light() const {
+  return true;
+}
+
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 //     Function: AmbientLight::bind
 //     Function: AmbientLight::bind
 //       Access: Public, Virtual
 //       Access: Public, Virtual

+ 2 - 1
panda/src/pgraph/ambientLight.h → panda/src/pgraphnodes/ambientLight.h

@@ -26,7 +26,7 @@
 //               be part of the scene graph, since it has no meaningful
 //               be part of the scene graph, since it has no meaningful
 //               position.
 //               position.
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
-class EXPCL_PANDA_PGRAPH AmbientLight : public LightNode {
+class EXPCL_PANDA_PGRAPHNODES AmbientLight : public LightNode {
 PUBLISHED:
 PUBLISHED:
   AmbientLight(const string &name);
   AmbientLight(const string &name);
 
 
@@ -36,6 +36,7 @@ protected:
 public:
 public:
   virtual PandaNode *make_copy() const;
   virtual PandaNode *make_copy() const;
   virtual void write(ostream &out, int indent_level) const;
   virtual void write(ostream &out, int indent_level) const;
+  virtual bool is_ambient_light() const;
 
 
 PUBLISHED:
 PUBLISHED:
   virtual int get_class_priority() const;
   virtual int get_class_priority() const;

+ 75 - 0
panda/src/pgraphnodes/config_pgraphnodes.cxx

@@ -0,0 +1,75 @@
+// Filename: config_pgraphnodes.cxx
+// Created by:  drose (05Nov08)
+//
+////////////////////////////////////////////////////////////////////
+//
+// PANDA 3D SOFTWARE
+// Copyright (c) Carnegie Mellon University.  All rights reserved.
+//
+// All use of this software is subject to the terms of the revised BSD
+// license.  You should have received a copy of this license along
+// with this source code in a file named "LICENSE."
+//
+////////////////////////////////////////////////////////////////////
+
+#include "config_pgraphnodes.h"
+
+#include "ambientLight.h"
+#include "directionalLight.h"
+#include "lightLensNode.h"
+#include "lightNode.h"
+#include "pointLight.h"
+#include "selectiveChildNode.h"
+#include "sequenceNode.h"
+#include "shaderGenerator.h"
+#include "spotlight.h"
+#include "switchNode.h"
+
+#include "dconfig.h"
+
+ConfigureDef(config_pgraphnodes);
+NotifyCategoryDef(pgraphnodes, "");
+
+ConfigureFn(config_pgraphnodes) {
+  init_libpgraphnodes();
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: init_libpgraphnodes
+//  Description: Initializes the library.  This must be called at
+//               least once before any of the functions or classes in
+//               this library can be used.  Normally it will be
+//               called by the static initializers and need not be
+//               called explicitly, but special cases exist.
+////////////////////////////////////////////////////////////////////
+void
+init_libpgraphnodes() {
+  static bool initialized = false;
+  if (initialized) {
+    return;
+  }
+  initialized = true;
+
+  AmbientLight::init_type();
+  DirectionalLight::init_type();
+  LightLensNode::init_type();
+  LightNode::init_type();
+  PointLight::init_type();
+  SelectiveChildNode::init_type();
+  SequenceNode::init_type();
+  ShaderGenerator::init_type();
+  Spotlight::init_type();
+  SwitchNode::init_type();
+
+  AmbientLight::register_with_read_factory();
+  DirectionalLight::register_with_read_factory();
+  LightLensNode::register_with_read_factory();
+  LightNode::register_with_read_factory();
+  PointLight::register_with_read_factory();
+  SelectiveChildNode::register_with_read_factory();
+  SequenceNode::register_with_read_factory();
+  Spotlight::register_with_read_factory();
+  SwitchNode::register_with_read_factory();
+
+  ShaderGenerator::set_default(new ShaderGenerator());
+}

+ 27 - 0
panda/src/pgraphnodes/config_pgraphnodes.h

@@ -0,0 +1,27 @@
+// Filename: config_pgraphnodes.h
+// Created by:  drose (05Nov08)
+//
+////////////////////////////////////////////////////////////////////
+//
+// PANDA 3D SOFTWARE
+// Copyright (c) Carnegie Mellon University.  All rights reserved.
+//
+// All use of this software is subject to the terms of the revised BSD
+// license.  You should have received a copy of this license along
+// with this source code in a file named "LICENSE."
+//
+////////////////////////////////////////////////////////////////////
+
+#ifndef CONFIG_PGRAPHNODES_H
+#define CONFIG_PGRAPHNODES_H
+
+#include "pandabase.h"
+
+class DSearchPath;
+
+ConfigureDecl(config_pgraphnodes, EXPCL_PANDA_PGRAPHNODES, EXPTP_PANDA_PGRAPHNODES);
+NotifyCategoryDecl(pgraphnodes, EXPCL_PANDA_PGRAPHNODES, EXPTP_PANDA_PGRAPHNODES);
+
+extern EXPCL_PANDA_PGRAPHNODES void init_libpgraphnodes();
+
+#endif

+ 0 - 0
panda/src/pgraph/directionalLight.I → panda/src/pgraphnodes/directionalLight.I


+ 0 - 0
panda/src/pgraph/directionalLight.cxx → panda/src/pgraphnodes/directionalLight.cxx


+ 2 - 2
panda/src/pgraph/directionalLight.h → panda/src/pgraphnodes/directionalLight.h

@@ -24,7 +24,7 @@
 // Description : A light shining from infinitely far away in a
 // Description : A light shining from infinitely far away in a
 //               particular direction, like sunlight.
 //               particular direction, like sunlight.
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
-class EXPCL_PANDA_PGRAPH DirectionalLight : public LightNode {
+class EXPCL_PANDA_PGRAPHNODES DirectionalLight : public LightNode {
 PUBLISHED:
 PUBLISHED:
   DirectionalLight(const string &name);
   DirectionalLight(const string &name);
 
 
@@ -58,7 +58,7 @@ public:
 
 
 private:
 private:
   // This is the data that must be cycled between pipeline stages.
   // This is the data that must be cycled between pipeline stages.
-  class EXPCL_PANDA_PGRAPH CData : public CycleData {
+  class EXPCL_PANDA_PGRAPHNODES CData : public CycleData {
   public:
   public:
     INLINE CData();
     INLINE CData();
     INLINE CData(const CData &copy);
     INLINE CData(const CData &copy);

+ 0 - 0
panda/src/pgraph/lightLensNode.I → panda/src/pgraphnodes/lightLensNode.I


+ 0 - 0
panda/src/pgraph/lightLensNode.cxx → panda/src/pgraphnodes/lightLensNode.cxx


+ 1 - 1
panda/src/pgraph/lightLensNode.h → panda/src/pgraphnodes/lightLensNode.h

@@ -24,7 +24,7 @@
 //       Class : LightLensNode
 //       Class : LightLensNode
 // Description : A derivative of Light and of LensNode.  
 // Description : A derivative of Light and of LensNode.  
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
-class EXPCL_PANDA_PGRAPH LightLensNode : public Light, public LensNode {
+class EXPCL_PANDA_PGRAPHNODES LightLensNode : public Light, public LensNode {
 PUBLISHED:
 PUBLISHED:
   LightLensNode(const string &name);
   LightLensNode(const string &name);
 
 

+ 0 - 0
panda/src/pgraph/lightNode.I → panda/src/pgraphnodes/lightNode.I


+ 0 - 0
panda/src/pgraph/lightNode.cxx → panda/src/pgraphnodes/lightNode.cxx


+ 1 - 1
panda/src/pgraph/lightNode.h → panda/src/pgraphnodes/lightNode.h

@@ -26,7 +26,7 @@
 //               Light except Spotlight (which must inherit from
 //               Light except Spotlight (which must inherit from
 //               LensNode instead) inherit from this class.
 //               LensNode instead) inherit from this class.
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
-class EXPCL_PANDA_PGRAPH LightNode : public Light, public PandaNode {
+class EXPCL_PANDA_PGRAPHNODES LightNode : public Light, public PandaNode {
 PUBLISHED:
 PUBLISHED:
   LightNode(const string &name);
   LightNode(const string &name);
 
 

+ 6 - 0
panda/src/pgraphnodes/pgraphnodes_composite1.cxx

@@ -0,0 +1,6 @@
+#include "ambientLight.cxx"
+#include "config_pgraphnodes.cxx"
+#include "directionalLight.cxx"
+#include "lightLensNode.cxx"
+#include "lightNode.cxx"
+#include "pointLight.cxx"

+ 5 - 0
panda/src/pgraphnodes/pgraphnodes_composite2.cxx

@@ -0,0 +1,5 @@
+#include "selectiveChildNode.cxx"
+#include "sequenceNode.cxx"
+#include "shaderGenerator.cxx"
+#include "spotlight.cxx"
+#include "switchNode.cxx"

+ 0 - 0
panda/src/pgraph/pointLight.I → panda/src/pgraphnodes/pointLight.I


+ 0 - 0
panda/src/pgraph/pointLight.cxx → panda/src/pgraphnodes/pointLight.cxx


+ 2 - 2
panda/src/pgraph/pointLight.h → panda/src/pgraphnodes/pointLight.h

@@ -24,7 +24,7 @@
 // Description : A light originating from a single point in space, and
 // Description : A light originating from a single point in space, and
 //               shining in all directions.
 //               shining in all directions.
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
-class EXPCL_PANDA_PGRAPH PointLight : public LightNode {
+class EXPCL_PANDA_PGRAPHNODES PointLight : public LightNode {
 PUBLISHED:
 PUBLISHED:
   PointLight(const string &name);
   PointLight(const string &name);
 
 
@@ -58,7 +58,7 @@ public:
 
 
 private:
 private:
   // This is the data that must be cycled between pipeline stages.
   // This is the data that must be cycled between pipeline stages.
-  class EXPCL_PANDA_PGRAPH CData : public CycleData {
+  class EXPCL_PANDA_PGRAPHNODES CData : public CycleData {
   public:
   public:
     INLINE CData();
     INLINE CData();
     INLINE CData(const CData &copy);
     INLINE CData(const CData &copy);

+ 0 - 0
panda/src/pgraph/selectiveChildNode.I → panda/src/pgraphnodes/selectiveChildNode.I


+ 0 - 0
panda/src/pgraph/selectiveChildNode.cxx → panda/src/pgraphnodes/selectiveChildNode.cxx


+ 1 - 1
panda/src/pgraph/selectiveChildNode.h → panda/src/pgraphnodes/selectiveChildNode.h

@@ -24,7 +24,7 @@
 // Description : A base class for nodes like LODNode and SequenceNode
 // Description : A base class for nodes like LODNode and SequenceNode
 //               that select only one visible child at a time.
 //               that select only one visible child at a time.
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
-class EXPCL_PANDA_PGRAPH SelectiveChildNode : public PandaNode {
+class EXPCL_PANDA_PGRAPHNODES SelectiveChildNode : public PandaNode {
 PUBLISHED:
 PUBLISHED:
   INLINE SelectiveChildNode(const string &name);
   INLINE SelectiveChildNode(const string &name);
 
 

+ 0 - 0
panda/src/pgraph/sequenceNode.I → panda/src/pgraphnodes/sequenceNode.I


+ 0 - 0
panda/src/pgraph/sequenceNode.cxx → panda/src/pgraphnodes/sequenceNode.cxx


+ 1 - 1
panda/src/pgraph/sequenceNode.h → panda/src/pgraphnodes/sequenceNode.h

@@ -26,7 +26,7 @@
 // Description : A node that automatically cycles through rendering
 // Description : A node that automatically cycles through rendering
 //               each one of its children according to its frame rate.
 //               each one of its children according to its frame rate.
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
-class EXPCL_PANDA_PGRAPH SequenceNode : public SelectiveChildNode, public AnimInterface {
+class EXPCL_PANDA_PGRAPHNODES SequenceNode : public SelectiveChildNode, public AnimInterface {
 PUBLISHED:
 PUBLISHED:
   INLINE SequenceNode(const string &name);
   INLINE SequenceNode(const string &name);
 
 

+ 0 - 0
panda/src/pgraph/shaderGenerator.I → panda/src/pgraphnodes/shaderGenerator.I


+ 0 - 24
panda/src/pgraph/shaderGenerator.cxx → panda/src/pgraphnodes/shaderGenerator.cxx

@@ -22,7 +22,6 @@
 #include "spotlight.h"
 #include "spotlight.h"
 
 
 TypeHandle ShaderGenerator::_type_handle;
 TypeHandle ShaderGenerator::_type_handle;
-PT(ShaderGenerator) ShaderGenerator::_default_generator;
 
 
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 //     Function: ShaderGenerator::Constructor
 //     Function: ShaderGenerator::Constructor
@@ -106,29 +105,6 @@ alloc_freg() {
   return "UNKNOWN";
   return "UNKNOWN";
 }
 }
 
 
-////////////////////////////////////////////////////////////////////
-//     Function: ShaderGenerator::get_default
-//       Access: Published, Static
-//  Description: Get a pointer to the default shader generator.
-////////////////////////////////////////////////////////////////////
-ShaderGenerator *ShaderGenerator::
-get_default() {
-  if (_default_generator == (ShaderGenerator *)NULL) {
-    _default_generator = new ShaderGenerator;
-  }
-  return _default_generator;
-}
-
-////////////////////////////////////////////////////////////////////
-//     Function: ShaderGenerator::set_default
-//       Access: Published, Static
-//  Description: Set the default shader generator.
-////////////////////////////////////////////////////////////////////
-void ShaderGenerator::
-set_default(ShaderGenerator *generator) {
-  _default_generator = generator;
-}
-
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 //     Function: ShaderGenerator::analyze_renderstate
 //     Function: ShaderGenerator::analyze_renderstate
 //       Access: Protected
 //       Access: Protected

+ 6 - 9
panda/src/pgraph/shaderGenerator.h → panda/src/pgraphnodes/shaderGenerator.h

@@ -16,8 +16,10 @@
 #define SHADERGENERATOR_H
 #define SHADERGENERATOR_H
 
 
 #include "pandabase.h"
 #include "pandabase.h"
-#include "typedWritableReferenceCount.h"
+#include "shaderGeneratorBase.h"
+#include "attribSlots.h"
 #include "nodePath.h"
 #include "nodePath.h"
+
 class AmbientLight;
 class AmbientLight;
 class DirectionalLight;
 class DirectionalLight;
 class PointLight;
 class PointLight;
@@ -58,15 +60,10 @@ class ShaderAttrib;
 //
 //
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 
 
-class EXPCL_PANDA_PGRAPH ShaderGenerator : public TypedWritableReferenceCount {
-private:
-  static PT(ShaderGenerator) _default_generator;
-
+class EXPCL_PANDA_PGRAPHNODES ShaderGenerator : public ShaderGeneratorBase {
 PUBLISHED:
 PUBLISHED:
   ShaderGenerator();
   ShaderGenerator();
   virtual ~ShaderGenerator();
   virtual ~ShaderGenerator();
-  static ShaderGenerator *get_default();
-  static void set_default(ShaderGenerator *generator);
   virtual CPT(RenderAttrib) synthesize_shader(const RenderState *rs);
   virtual CPT(RenderAttrib) synthesize_shader(const RenderState *rs);
   
   
 protected:
 protected:
@@ -135,9 +132,9 @@ public:
     return _type_handle;
     return _type_handle;
   }
   }
   static void init_type() {
   static void init_type() {
-    TypedReferenceCount::init_type();
+    ShaderGeneratorBase::init_type();
     register_type(_type_handle, "ShaderGenerator",
     register_type(_type_handle, "ShaderGenerator",
-                  TypedReferenceCount::get_class_type());
+                  ShaderGeneratorBase::get_class_type());
   }
   }
   virtual TypeHandle get_type() const {
   virtual TypeHandle get_type() const {
     return get_class_type();
     return get_class_type();

+ 0 - 0
panda/src/pgraph/spotlight.I → panda/src/pgraphnodes/spotlight.I


+ 0 - 0
panda/src/pgraph/spotlight.cxx → panda/src/pgraphnodes/spotlight.cxx


+ 2 - 2
panda/src/pgraph/spotlight.h → panda/src/pgraphnodes/spotlight.h

@@ -35,7 +35,7 @@ class Texture;
 //               SpotLight, because "spotlight" is a single English
 //               SpotLight, because "spotlight" is a single English
 //               word, instead of two words.
 //               word, instead of two words.
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
-class EXPCL_PANDA_PGRAPH Spotlight : public LightLensNode {
+class EXPCL_PANDA_PGRAPHNODES Spotlight : public LightLensNode {
 PUBLISHED:
 PUBLISHED:
   Spotlight(const string &name);
   Spotlight(const string &name);
 
 
@@ -78,7 +78,7 @@ private:
 
 
 private:
 private:
   // This is the data that must be cycled between pipeline stages.
   // This is the data that must be cycled between pipeline stages.
-  class EXPCL_PANDA_PGRAPH CData : public CycleData {
+  class EXPCL_PANDA_PGRAPHNODES CData : public CycleData {
   public:
   public:
     INLINE CData();
     INLINE CData();
     INLINE CData(const CData &copy);
     INLINE CData(const CData &copy);

+ 0 - 0
panda/src/pgraph/switchNode.I → panda/src/pgraphnodes/switchNode.I


+ 0 - 0
panda/src/pgraph/switchNode.cxx → panda/src/pgraphnodes/switchNode.cxx


+ 2 - 2
panda/src/pgraph/switchNode.h → panda/src/pgraphnodes/switchNode.h

@@ -24,7 +24,7 @@
 // Description : A node that renders only one of its children,
 // Description : A node that renders only one of its children,
 //               according to the user's indication.
 //               according to the user's indication.
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
-class EXPCL_PANDA_PGRAPH SwitchNode : public SelectiveChildNode {
+class EXPCL_PANDA_PGRAPHNODES SwitchNode : public SelectiveChildNode {
 PUBLISHED:
 PUBLISHED:
   INLINE SwitchNode(const string &name);
   INLINE SwitchNode(const string &name);
 
 
@@ -43,7 +43,7 @@ PUBLISHED:
   virtual int get_visible_child() const;
   virtual int get_visible_child() const;
 
 
 private:
 private:
-  class EXPCL_PANDA_PGRAPH CData : public CycleData {
+  class EXPCL_PANDA_PGRAPHNODES CData : public CycleData {
   public:
   public:
     INLINE CData();
     INLINE CData();
     INLINE CData(const CData &copy);
     INLINE CData(const CData &copy);