Проблема с графикой OpenGL ES, когда не вызывается glClear()

Я работаю над приложением для iPad, в котором есть несколько тысяч частиц, которыми пользователь может манипулировать прикосновениями. Чтобы создать интересный дизайн, я хочу сделать так, чтобы при рисовании частицы в каком-либо месте этот рисунок не очищался в следующем кадре. Это создает своего рода эффект «следов». На данный момент я делаю это, когда «следы» включены, glClear() не вызывается для каждого кадра, поэтому рисование из каждого кадра добавляется к рисунку предыдущего кадра. Это отлично работает в симуляторе iPad, но по какой-то причине, когда я запускаю это на реальном устройстве, когда я включаю следы на следах частиц, они мерцают, как будто с буферами происходит что-то странное.

Есть ли лучший способ создания следов / почему эта проблема с графикой возникает только в симуляторе?

Спасибо!


person markv12    schedule 04.08.2011    source источник


Ответы (1)


glClear() вызывается между буферами, чтобы вы могли начать рисовать следующий с чистого листа — вам действительно нужно очищать буфер между кадрами. Не рекомендуется продолжать заполнять буфер, так как вы можете начать создавать артефакты (как вы заметили).

Чтобы создать эффект слежения, вы, вероятно, захотите использовать дополнительные частицы. Следите за положением или скоростью частицы, а затем рисуйте дополнительные частицы по следу.

person Noah    schedule 04.08.2011
comment
Спасибо. Что касается дополнительных частиц, то на данный момент программа почти на пределе возможностей iPad в плане графики. Есть ли другой способ просто присвоить внешний вид предыдущего буфера текущему буферу, а затем нарисовать поверх него? - person markv12; 05.08.2011
comment
Вы можете попробовать создать буфер, а затем с помощью glSwapBuffer переместить созданный буфер на передний план, но я не знаю, даст ли это вам увеличение производительности. - person Noah; 05.08.2011