У вас есть два варианта. Если ваше оборудование не поддерживает FBO, вам придется делать то, что вы написали. Чтобы нарисовать исходную текстуру, просто нарисуйте квадрат размером с экран с [0,1] текстурными координатами. Обязательно используйте GL_NEAREST
в качестве режима фильтрации и GL_CLAMP_TO_EDGE
в качестве режима обтекания, чтобы получить точную копию изображения. Затем нарисуйте ваши постепенные изменения поверх этого. Когда вы закончите, вы можете получить текстуру из буфера кадров с помощью glCopyTexSubImage2D
.
Когда ваше оборудование поддерживает FBO, вы можете добиться гораздо большей эффективности. В этом случае прикрепите текстуру к FBO и визуализируйте ее. Таким образом вы визуализируете непосредственно в текстуру, и вам не нужно копировать. Вам также не нужно копировать исходную текстуру, просто не очищайте кадровый буфер (текстуру) и выполняйте рендеринг прямо поверх предыдущих данных. Прочитайте некоторый вводный материал по объектам кадрового буфера для получения дополнительной информации.