Changeset 1054

Show
Ignore:
Timestamp:
01/29/08 02:13:31 (8 months ago)
Author:
vossg
Message:

fixed: added parent validity check (crashes otherwise)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/Source/System/NodeCores/Drawables/Terrain/QuadTree/OSGTiledQuadTreeTerrain.cpp

    r997 r1054  
    147147    if((whichField & HeightTilesFieldMask) && getMFHeightTiles()->size() > 0)  
    148148    { 
    149         if(getParents()[0] != NullFC) 
     149        if(getParents().size() > 0 && getParents()[0] != NullFC) 
    150150        { // parent must be set! 
    151151            NodePtr pParent = dynamic_cast<NodePtr>(getParents()[0].getCPtr()); 
     
    213213        (whichField & PerPixelLightingFieldMask)))  
    214214    { 
    215         Real32 tstepx = 1.0f/getSizeX(); 
    216         Real32 tstepy = 1.0f/getSizeY(); 
    217         UInt32 i, j; 
    218         const UInt32 roi = getSizeROI()+getSizeROI()+1; 
    219         for(j=0; j<roi; ++j)  
    220         { 
    221             for(i=0; i<roi; ++i)  
     215        if(getParents().size() > 0 && getParents()[0] != NullFC) 
     216        { // parent must be set! 
     217            Real32 tstepx = 1.0f/getSizeX(); 
     218            Real32 tstepy = 1.0f/getSizeY(); 
     219            UInt32 i, j; 
     220            const UInt32 roi = getSizeROI()+getSizeROI()+1; 
     221            for(j=0; j<roi; ++j)  
     222            { 
     223                for(i=0; i<roi; ++i)  
     224                { 
     225                    NodePtr pParent = dynamic_cast<NodePtr>(getParents()[0].getCPtr()); 
     226                     
     227                    NodePtr node = pParent->getChild(j*roi+i); 
     228                     
     229                    QuadTreeTerrainPtr terrain =  
     230                        dynamic_cast<QuadTreeTerrainPtr>(node->getCore()); 
     231                     
     232                    if (terrain == NullFC)  
     233                    { 
     234                        continue; 
     235                    } 
     236                     
     237                    if(getMaterial() == NullFC)  
     238                    { // use material of MFHeightTextures 
     239                        if(getHeightTextures().size() > j*getSizeX()+i &&  
     240                           i < getSizeX() && j < getSizeY()) 
     241                        {              
     242                            terrain->setMaterial( 
     243                                getHeightTextures(j*getSizeX()+i)); 
     244                        } 
     245                    }  
     246                    else  
     247                    { // use material of this MaterialGroup 
     248                        MaterialPtr mat = cloneMaterial(getMaterial()); 
     249                        terrain->setMaterial(mat); 
     250                        terrain->setOriginTexX(i*tstepx); 
     251                        terrain->setOriginTexY(j*tstepy); 
     252                        terrain->setTexSpacing (tstepx); 
     253                        terrain->setTexYSpacing(tstepy); 
     254                    } 
     255                     
     256                    terrain->setPerPixelLighting(getPerPixelLighting()); 
     257                } 
     258            } 
     259        } 
     260    } 
     261 
     262    if((whichField & GeoMorphingFieldMask))  
     263    { 
     264        if(getParents().size() > 0 && getParents()[0] != NullFC) 
     265        { // parent must be set! 
     266            const UInt32 roi  = getSizeROI()+getSizeROI()+1; 
     267            const UInt32 roi2 = roi*roi; 
     268             
     269            for(UInt32 i=0; i<roi2; ++i)  
    222270            { 
    223271                NodePtr pParent = dynamic_cast<NodePtr>(getParents()[0].getCPtr()); 
    224  
    225                 NodePtr node = pParent->getChild(j*roi+i); 
    226  
     272                 
     273                NodePtr node = pParent->getChild(i); 
     274                 
    227275                QuadTreeTerrainPtr terrain =  
    228276                    dynamic_cast<QuadTreeTerrainPtr>(node->getCore()); 
    229  
    230                 if (terrain == NullFC)  
     277                 
     278                if(terrain == NullFC)  
    231279                { 
    232280                    continue; 
    233281                } 
    234  
    235                 if(getMaterial() == NullFC)  
    236                 { // use material of MFHeightTextures 
    237                     if(getHeightTextures().size() > j*getSizeX()+i &&  
    238                        i < getSizeX() && j < getSizeY()) 
    239                     {          
    240                         terrain->setMaterial( 
    241                             getHeightTextures(j*getSizeX()+i)); 
    242                     } 
    243                 }  
    244                 else  
    245                 { // use material of this MaterialGroup 
    246                     MaterialPtr mat = cloneMaterial(getMaterial()); 
    247                     terrain->setMaterial(mat); 
    248                     terrain->setOriginTexX(i*tstepx); 
    249                     terrain->setOriginTexY(j*tstepy); 
    250                     terrain->setTexSpacing (tstepx); 
    251                     terrain->setTexYSpacing(tstepy); 
    252                 } 
    253  
    254                 terrain->setPerPixelLighting(getPerPixelLighting()); 
     282                 
     283                terrain->setGeoMorphing(getGeoMorphing()); 
    255284            } 
    256        } 
    257     } 
    258  
    259     if((whichField & GeoMorphingFieldMask))  
    260     { 
    261         const UInt32 roi  = getSizeROI()+getSizeROI()+1; 
    262         const UInt32 roi2 = roi*roi; 
    263  
    264         for(UInt32 i=0; i<roi2; ++i)  
    265         { 
    266             NodePtr pParent = dynamic_cast<NodePtr>(getParents()[0].getCPtr()); 
    267  
    268             NodePtr node = pParent->getChild(i); 
    269              
    270             QuadTreeTerrainPtr terrain =  
    271                 dynamic_cast<QuadTreeTerrainPtr>(node->getCore()); 
    272  
    273             if(terrain == NullFC)  
    274             { 
    275                 continue; 
    276             } 
    277  
    278             terrain->setGeoMorphing(getGeoMorphing()); 
    279285        } 
    280286    } 
     
    282288    if((whichField & DetailFieldMask))  
    283289    { 
    284         const UInt32 roi  = getSizeROI()+getSizeROI()+1; 
    285         const UInt32 roi2 = roi*roi; 
    286  
    287         for (UInt32 i=0; i<roi2; ++i)  
    288         { 
    289             NodePtr pParent = dynamic_cast<NodePtr>(getParents()[0].getCPtr()); 
    290  
    291             NodePtr    node = pParent->getChild(i); 
    292  
    293             QuadTreeTerrainPtr terrain =  
    294                 dynamic_cast<QuadTreeTerrainPtr>(node->getCore()); 
    295  
    296             if(terrain == NullFC)  
     290        if(getParents().size() > 0 && getParents()[0] != NullFC) 
     291        { // parent must be set! 
     292            const UInt32 roi  = getSizeROI()+getSizeROI()+1; 
     293            const UInt32 roi2 = roi*roi; 
     294 
     295            for (UInt32 i=0; i<roi2; ++i)  
    297296            { 
    298                 continue; 
     297                NodePtr pParent = dynamic_cast<NodePtr>(getParents()[0].getCPtr()); 
     298                 
     299                NodePtr    node = pParent->getChild(i); 
     300                 
     301                QuadTreeTerrainPtr terrain =  
     302                    dynamic_cast<QuadTreeTerrainPtr>(node->getCore()); 
     303                 
     304                if(terrain == NullFC)  
     305                { 
     306                    continue; 
     307                } 
     308                 
     309                terrain->setDetail(getDetail()); 
    299310            } 
    300  
    301             terrain->setDetail(getDetail()); 
    302311        } 
    303312    }