Сбой RenderTexture при операциях посещения (Cocos2d-x)

Я столкнулся с очень странной проблемой, которой раньше у меня не было, может быть, я слишком устал и не вижу очевидного. Я создаю RenderTexture и вызываю visit() на узле отрисовки, находясь между begin() и end() текстуры рендеринга:

(это мой немодифицированный код в методе инициализации моей основной сцены)

RenderTexture *rt = RenderTexture::create(500, 500);
rt->beginWithClear(1, 1, 1, 1);

// [1] Should create a dot in the center of the texture, but...
DrawNode *dot = DrawNode::create();
dot->drawDot(Point(250, 250), 20, Color4F::RED);

// [2] When calling this, the code crashes later, issuing an EXC_BAD_ACCESS error
// somewhere in the RenderCommand queue.
dot->visit();

rt->end();

rt->setPosition(m_visibleSize.width / 2, m_visibleSize.height / 2);
this->addChild(rt, 100000);

Спасибо!


person malloc19    schedule 04.06.2014    source источник


Ответы (1)


Глупый я... Я забыл сохранить dot, поэтому он был освобожден в конце блока, а в очереди RenderCommand появился висячий указатель. Решение состоит в том, чтобы сделать

dot->retain();

перед вызовом visit().

person malloc19    schedule 04.06.2014