Каково различие между двумя функциями? Какое-либо различие в производительности?
Спасибо..
Вы создаете текстуру с помощью glTexImage
, а затем обновляете ее содержимое с помощью glTexSubImage
. При обновлении текстуры вы можете обновить всю текстуру или только ее подпрямоугольник.
Гораздо эффективнее создать одну текстуру и обновлять ее, чем многократно создавать и удалять, так что в этом смысле, если у вас есть текстура, которую вы хотите обновить, всегда используйте glTexSubImage
(после первоначального создания).
Для обновления текстуры могут быть применимы и другие методы. Например, смотрите эту статью о потоковой передаче текстур для получения дополнительной информации.
(Первоначально в этой статье предлагалось использовать glMapBuffer
для обновления текстуры - см. обсуждение ниже)
Функции gl с "sub" в названии не ограничиваются размерами power-of-2. Как указывает gavinb, вам нужно использовать вариант non-sub один раз, чтобы установить общие размеры, но я не согласен с тем, что повторный вызов варианта non-sub медленнее, чем использование "sub" для обновления - GPU по-прежнему может перезаписать существующую текстуру на месте, пока вы используете тот же идентификатор текстуры.