Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 5397 in orxonox.OLD for trunk/src/lib/graphics/render2D/render_2d.cc


Ignore:
Timestamp:
Oct 18, 2005, 5:33:11 PM (19 years ago)
Author:
bensch
Message:

orxonox/trunk: Elemet2D-drawing better
prevent segfault in setParent with NULL as new Parent in Element2D and PNode

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/lib/graphics/render2D/render_2d.cc

    r5382 r5397  
    6767{
    6868  if (likely(element2D != NULL))
    69     this->element2DList[(int)log2(E2D_DEFAULT_LAYER)]->add(element2D);
     69    this->element2DList[E2D_DEFAULT_LAYER]->add(element2D);
    7070}
    7171
     
    7979void Render2D::unregisterElement2D(Element2D* element2D)
    8080{
    81   this->element2DList[(int)log2(element2D->getLayer())]->remove(element2D);
     81  this->element2DList[element2D->getLayer()]->remove(element2D);
    8282}
    8383
     
    9393    return;
    9494
    95   if (unlikely(pow(2, E2D_LAYER_COUNT ) > to))
     95  if (E2D_LAYER_COUNT  > to)
    9696    to = E2D_DEFAULT_LAYER;
    9797  if (element2D->getLayer() != to)
    9898  {
    99     this->element2DList[(int)log2(element2D->getLayer())]->remove(element2D);
    100     this->element2DList[(int)log2(to)]->add(element2D);
     99    this->element2DList[element2D->getLayer()]->remove(element2D);
     100    this->element2DList[to]->add(element2D);
    101101  }
    102102}
     
    124124
    125125/**
    126  * renders all the Elements of the Render2D-engine
    127  * @param layer the Layer to draw
     126 * renders all the Elements of the Render2D-engine's layer
     127 * @param layer the Layer to draw (if E2D_LAYER_ALL then all layers will be drawn)
    128128 */
    129129void Render2D::draw(unsigned int layer) const
     
    131131  GraphicsEngine::enter2DMode();
    132132
    133   int drawLayer = 1;
    134 
    135   for (int i = 0; i < E2D_LAYER_COUNT; i++)
     133  if (layer != E2D_LAYER_ALL)
    136134  {
    137     if (layer & drawLayer && this->element2DList[i]->getSize() > 0)
     135    if ( this->element2DList[layer]->getSize() > 0)
    138136    {
    139       tIterator<Element2D>* iterator = this->element2DList[i]->getIterator();
     137      tIterator<Element2D>* iterator = this->element2DList[layer]->getIterator();
    140138      Element2D* elem = iterator->firstElement();
    141139      while (elem != NULL)
     
    147145      delete iterator;
    148146    }
    149     drawLayer << 1;
     147  }
     148  else  // if (layer != E2D_LAYER_ALL)
     149  {
     150    for (int i = 0; i < E2D_LAYER_COUNT; i++)
     151    {
     152      if (this->element2DList[i]->getSize() > 0)
     153      {
     154        tIterator<Element2D>* iterator = this->element2DList[i]->getIterator();
     155        Element2D* elem = iterator->firstElement();
     156        while (elem != NULL)
     157        {
     158          if (elem->isVisible())
     159            elem->draw();
     160          elem = iterator->nextElement();
     161        }
     162        delete iterator;
     163      }
     164    }
    150165  }
    151166  GraphicsEngine::leave2DMode();
Note: See TracChangeset for help on using the changeset viewer.