diff --git a/src/osgPlugins/flt/LightPointRecord.cpp b/src/osgPlugins/flt/LightPointRecord.cpp index 0fdc5a894..c50b890a1 100644 --- a/src/osgPlugins/flt/LightPointRecord.cpp +++ b/src/osgPlugins/flt/LightPointRecord.cpp @@ -3,6 +3,7 @@ #include "flt.h" #include "Registry.h" #include "LightPointRecord.h" +#include using namespace flt; @@ -24,45 +25,64 @@ LightPointRecord::~LightPointRecord() { } +SLightPoint* LightPointRecord::getData() const +{ + if (LightPointRecord::getFlightVersion()>1551) + { + return (SLightPoint*)_pData; + } + else + { + // disable ligth point for older versions since they don't have + // the same format as SLightPoint, this needs fixing but this will have + // to wait till after OSG 1.0. + // Robert Osfield, 18th November 2005. + return 0; + } +} + void LightPointRecord::endian() { SLightPoint *pSLightPoint = (SLightPoint*)getData(); + if (pSLightPoint) + { + ENDIAN( pSLightPoint->iMaterial ); + ENDIAN( pSLightPoint->iFeature ); + ENDIAN( pSLightPoint->diMode ); + ENDIAN( pSLightPoint->sfIntensityFront ); + ENDIAN( pSLightPoint->sfIntensityBack ); + ENDIAN( pSLightPoint->sfMinDefocus ); + ENDIAN( pSLightPoint->sfMaxDefocus ); + ENDIAN( pSLightPoint->diFadeMode ); + ENDIAN( pSLightPoint->diFogPunchMode ); + ENDIAN( pSLightPoint->diDirectionalMode ); + ENDIAN( pSLightPoint->diRangeMode ); + ENDIAN( pSLightPoint->sfMinPixelSize ); + ENDIAN( pSLightPoint->sfMaxPixelSize ); + ENDIAN( pSLightPoint->afActualPixelSize ); + ENDIAN( pSLightPoint->sfTranspFalloff ); + ENDIAN( pSLightPoint->sfTranspFalloffExponent ); + ENDIAN( pSLightPoint->sfTranspFalloffScalar ); + ENDIAN( pSLightPoint->sfTranspFalloffClamp ); + ENDIAN( pSLightPoint->sfFog ); + ENDIAN( pSLightPoint->sfReserved ); + ENDIAN( pSLightPoint->sfSize ); + ENDIAN( pSLightPoint->diDirection ); + ENDIAN( pSLightPoint->sfLobeHoriz ); + ENDIAN( pSLightPoint->sfLobeVert ); + ENDIAN( pSLightPoint->sfLobeRoll ); + ENDIAN( pSLightPoint->sfFalloff ); + ENDIAN( pSLightPoint->sfAmbientIntensity ); + ENDIAN( pSLightPoint->sfAnimPeriod ); + ENDIAN( pSLightPoint->sfAnimPhaseDelay ); + ENDIAN( pSLightPoint->sfAnimPeriodEnable ); + ENDIAN( pSLightPoint->sfSignificance ); + ENDIAN( pSLightPoint->sfDrawOrder ); + ENDIAN( pSLightPoint->sfFlags ); + pSLightPoint->animRot.endian(); + } - ENDIAN( pSLightPoint->iMaterial ); - ENDIAN( pSLightPoint->iFeature ); - ENDIAN( pSLightPoint->diMode ); - ENDIAN( pSLightPoint->sfIntensityFront ); - ENDIAN( pSLightPoint->sfIntensityBack ); - ENDIAN( pSLightPoint->sfMinDefocus ); - ENDIAN( pSLightPoint->sfMaxDefocus ); - ENDIAN( pSLightPoint->diFadeMode ); - ENDIAN( pSLightPoint->diFogPunchMode ); - ENDIAN( pSLightPoint->diDirectionalMode ); - ENDIAN( pSLightPoint->diRangeMode ); - ENDIAN( pSLightPoint->sfMinPixelSize ); - ENDIAN( pSLightPoint->sfMaxPixelSize ); - ENDIAN( pSLightPoint->afActualPixelSize ); - ENDIAN( pSLightPoint->sfTranspFalloff ); - ENDIAN( pSLightPoint->sfTranspFalloffExponent ); - ENDIAN( pSLightPoint->sfTranspFalloffScalar ); - ENDIAN( pSLightPoint->sfTranspFalloffClamp ); - ENDIAN( pSLightPoint->sfFog ); - ENDIAN( pSLightPoint->sfReserved ); - ENDIAN( pSLightPoint->sfSize ); - ENDIAN( pSLightPoint->diDirection ); - ENDIAN( pSLightPoint->sfLobeHoriz ); - ENDIAN( pSLightPoint->sfLobeVert ); - ENDIAN( pSLightPoint->sfLobeRoll ); - ENDIAN( pSLightPoint->sfFalloff ); - ENDIAN( pSLightPoint->sfAmbientIntensity ); - ENDIAN( pSLightPoint->sfAnimPeriod ); - ENDIAN( pSLightPoint->sfAnimPhaseDelay ); - ENDIAN( pSLightPoint->sfAnimPeriodEnable ); - ENDIAN( pSLightPoint->sfSignificance ); - ENDIAN( pSLightPoint->sfDrawOrder ); - ENDIAN( pSLightPoint->sfFlags ); - pSLightPoint->animRot.endian(); } diff --git a/src/osgPlugins/flt/LightPointRecord.h b/src/osgPlugins/flt/LightPointRecord.h index c0db0bf42..4f5b42890 100644 --- a/src/osgPlugins/flt/LightPointRecord.h +++ b/src/osgPlugins/flt/LightPointRecord.h @@ -117,8 +117,8 @@ class LightPointRecord : public PrimNodeRecord virtual void accept(RecordVisitor& rv) { rv.apply(*this); } // virtual void traverse(RecordVisitor& rv); - virtual SLightPoint* getData() const { return (SLightPoint*)_pData; } - + virtual SLightPoint* getData() const; + protected: virtual ~LightPointRecord(); diff --git a/src/osgPlugins/flt/flt2osg.cpp b/src/osgPlugins/flt/flt2osg.cpp index 563e164fa..867d077b2 100644 --- a/src/osgPlugins/flt/flt2osg.cpp +++ b/src/osgPlugins/flt/flt2osg.cpp @@ -2716,9 +2716,11 @@ osg::Group* ConvertFromFLT::visitExternal(osg::Group& osgParent, ExternalRecord* void ConvertFromFLT::visitLightPoint(GeoSetBuilder* pBuilder,osg::Group& osgParent, LightPointRecord* rec) { + SLightPoint *pSLightPoint = (SLightPoint*)rec->getData(); + if (!pSLightPoint) return; + DynGeoSet* dgset = pBuilder->getDynGeoSet(); osg::StateSet* stateSet = dgset->getStateSet(); - SLightPoint *pSLightPoint = (SLightPoint*)rec->getData(); dgset->setPrimType(osg::PrimitiveSet::POINTS); stateSet->setMode(GL_LIGHTING, osg::StateAttribute::OFF); @@ -2759,6 +2761,7 @@ void ConvertFromFLT::visitLightPoint(GeoSetBuilder* pBuilder,osg::Group& osgPare void ConvertFromFLT::visitLightPoint(osg::Group& osgParent, LightPointRecord* rec) { SLightPoint *pSLightPoint = (SLightPoint*)rec->getData(); + if (!pSLightPoint) return; GeoSetBuilder pBuilder; DynGeoSet* dgset = pBuilder.getDynGeoSet();