Мерцающие артефакты спрайта после обновления версии cocos2d

Я использую Kobold2D, и я только что обновился с версии 2.0.3 до версии 2.1.0 (это означает, что я перешел с cocos2d-iphone v2.0 на cocos2d-iphone v2.1).

До обновления мой проект работал и отлично смотрелся на моем iPhone 5.

После обновления появились эти таинственные, мерцающие, мерцающие угловатые артефакты, когда я запускаю проект на iPhone. Они довольно широко распространены, но, что интересно, когда я запускаю проект в симуляторе, таких артефактов не возникает.

Кажется, есть корреляция с артефактами и моим использованием объектов анимации cocos CCParticleSystem. Другими словами, кажется, что артефакты присутствуют на протяжении анимации частиц и исчезают после того, как "продолжительность жизни" анимации частиц завершена.

Вот скриншот. В этом случае артефакты выглядят как синие "клинья", но они сильно смещаются и иногда принимают другие цвета и формы.

Кто-нибудь знает, что я могу сделать, чтобы устранить эти раздражающие артефакты?

Скриншот

1 ответ

Решение

Это известная ошибка: http://www.cocos2d-iphone.org/forum/topic/208630?replies=6

исправить (или исправить:), измените CCParticleSystemQuad.m. В методе postSetp прокомментируйте вариант 1 и раскомментируйте вариант 3.

Это сработало для меня и для DropDKeith (пользовательский форум cocos2d)

-(void) postStep
{
    glBindBuffer(GL_ARRAY_BUFFER, _buffersVBO[0] );

    // Option 1: Sub Data
//  glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(_quads[0])*_particleCount, _quads);

    // Option 2: Data
//  glBufferData(GL_ARRAY_BUFFER, sizeof(_quads[0]) * _particleCount, _quads, GL_DYNAMIC_DRAW);

    // Option 3: Orphaning + glMapBuffer
    glBufferData(GL_ARRAY_BUFFER, sizeof(_quads[0])*_totalParticles, nil, GL_STREAM_DRAW);
    void *buf = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
    memcpy(buf, _quads, sizeof(_quads[0])*_particleCount);
    glUnmapBuffer(GL_ARRAY_BUFFER);

    glBindBuffer(GL_ARRAY_BUFFER, 0);

    CHECK_GL_ERROR_DEBUG();
}
Другие вопросы по тегам