glob3mobile / g3m

The multiplatform advanced visualization framework
http://www.glob3mobile.com/
Other
117 stars 56 forks source link

Adding a lot of Shapes to ShapesRenderer crashes the app (ios) #128

Open waphumanoid opened 9 years ago

waphumanoid commented 9 years ago

Hi. I'm facing a problem with adding twenty or so Shapes like this:

ViewController.mm:

- (ShapesRenderer *)createShapesRenderer:(const Planet *)planet
{
        ShapesRenderer* shapesRenderer = new ShapesRenderer();
        ...
        for (int j=0; j < 20; j++)
        {
            Shape* sphere = new EllipsoidShape(new Geodetic3D(Angle::fromDegrees(0),
                                                              Angle::fromDegrees(0),
                                                              -1),
                                               RELATIVE_TO_GROUND,
                                               Vector3D(50, 50, 50),
                                               8,
                                               0,
                                               false,
                                               false,
                                               Color::fromRGBA(0.7f, 0.7f, 0.7f, 0.5f));
            shapesRenderer->addShape(sphere);
        }
        ...

in the createShapesRenderer() method from G3MiOSDemo (and in my own project as well). It crashes in

Context.cpp:

#ifdef C_CODE
bool MyDataSortPredicate(const OrderedRenderable* or1,
                         const OrderedRenderable* or2) {
  return ( or1->squaredDistanceFromEye() >= or2->squaredDistanceFromEye() ); <-- Thread 1: EXC_BAD_ACCESS ...
}
#endif

...

std::vector<OrderedRenderable*>* G3MRenderContext::getSortedOrderedRenderables() const {
  if (_orderedRenderables != NULL) {
#ifdef C_CODE
    std::sort(_orderedRenderables->begin(),
              _orderedRenderables->end(),
              MyDataSortPredicate);
#endif
#ifdef JAVA_CODE
    java.util.Collections.sort(
                               _orderedRenderables,
                               new java.util.Comparator<OrderedRenderable>() {
                                 @Override
                                 public int compare(final OrderedRenderable or1,
                                                    final OrderedRenderable or2) {
                                   return Double.compare(or2.squaredDistanceFromEye(),
                                                         or1.squaredDistanceFromEye());
                                 }
                               });
#endif
  }

  return _orderedRenderables;
}

However 15 or less shapes works great. Thank you.

DiegoGomezDeck commented 9 years ago

Hello @waphumanoid,

EXC_BAD_ACCESS in this line can only means a Dangling-pointer or a NULL.

Can you check if this is the case?