Мерцающие артефакты спрайта после обновления версии 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();
}