1 #include "osg/LightSource" 2 3 #include "osgDB/Registry" 4 #include "osgDB/Input" 5 #include "osgDB/Output" 6 7 using namespace osg; 8 using namespace osgDB; 9 10 // forward declare functions to use later. 11 bool LightSource_readLocalData(Object& obj, Input& fr); 12 bool LightSource_writeLocalData(const Object& obj, Output& fw); 13 14 // register the read and write functions with the osgDB::Registry. 15 REGISTER_DOTOSGWRAPPER(LightSource) 16 ( 17 new osg::LightSource, 18 "LightSource", 19 "Object Node LightSource Group", 20 &LightSource_readLocalData, 21 &LightSource_writeLocalData 22 ); 23 24 bool LightSource_readLocalData(Object& obj, Input& fr) 25 { 26 bool iteratorAdvanced = false; LightModel_readLocalData(Object & obj,Input & fr)27 28 LightSource& lightsource = static_cast<LightSource&>(obj); 29 30 if (fr[0].matchWord("referenceFrame")) 31 { 32 bool cullingActiveBefore = lightsource.getCullingActive(); 33 34 if (fr[1].matchWord("RELATIVE_TO_ABSOLUTE") || fr[1].matchWord("ABSOLUTE")) 35 { 36 lightsource.setReferenceFrame(LightSource::ABSOLUTE_RF); 37 fr += 2; 38 iteratorAdvanced = true; 39 } 40 if (fr[1].matchWord("RELATIVE_TO_PARENTS") || fr[1].matchWord("RELATIVE")) 41 { 42 lightsource.setReferenceFrame(LightSource::RELATIVE_RF); 43 fr += 2; 44 iteratorAdvanced = true; 45 } 46 47 // if culling wasn't before reset it to off. 48 if (!cullingActiveBefore && lightsource.getCullingActive()) 49 { 50 lightsource.setCullingActive(cullingActiveBefore); 51 } 52 } 53 54 osg::ref_ptr<StateAttribute> sa=fr.readStateAttribute(); 55 osg::Light* light = dynamic_cast<Light*>(sa.get()); 56 if (light) 57 { 58 lightsource.setLight(light); 59 iteratorAdvanced = true; 60 } 61 62 return iteratorAdvanced; 63 } 64 65 66 bool LightSource_writeLocalData(const Object& obj, Output& fw) 67 { 68 const LightSource& lightsource = static_cast<const LightSource&>(obj); 69 70 fw.indent() << "referenceFrame "; 71 switch (lightsource.getReferenceFrame()) 72 { 73 case LightSource::ABSOLUTE_RF: 74 fw << "ABSOLUTE\n"; 75 break; 76 case LightSource::RELATIVE_RF: 77 default: 78 fw << "RELATIVE\n"; 79 }; 80 81 if (lightsource.getLight()) fw.writeObject(*lightsource.getLight()); 82 83 return true; 84 } 85