4: Если использование этих входных точек делают метаданные (формат и размеры) неизменный?
RESOLVED: Да.
ОБСУЖДЕНИЕ: Преимущества знания метаданных не могут измениться, вероятно, перевесят дополнительные затраты на проверку флага TEXTURE_IMMUTABLE_FORMAT при каждом вызове спецификации текстуры.
5: Должно ли законно полностью заменить текстуру, используя новый вызов TexStorage *?
RESOLVED. Это не допустимо.
ОБСУЖДЕНИЕ: Это полезно для аннулирования всех уровней текстуры. Разрешить изменение метаданных здесь проще, чем пытаться определить переносимое определение того, что означает изменение метаданных (например, что, если во второй раз вы использовали нестандартный внутренний формат и внутренний формат соответствующего размера во второй раз, Versa)?
Однако, хотя это во многом аналогично удалению старого объекта текстуры и замене его новым, оно утрачивает некоторые преимущества неизменности. В частности, поскольку при этом не происходит сброс привязок, он не позволяет путь перехода к API, который проверяет формат текстуры во время привязки.
6: Должен ли законный использовать TexImage * после TexStorage *, если он не влияет на метаданные?
ПОСТАНОВИЛИ: Нет
ОБСУЖДЕНИЯ: Потенциальный случай использования, чтобы позволить один уровень текстуры, чтобы быть признан недействительным, используя указатель NULL.Однако, как отмечено выше, нетривиально определить, что представляет собой изменение.
Позвольте мне поставить это по-другому: если ARB мысли в месте текстуры модификация была хорошая идея, они не имели бы glTexStorage
явно запретить его.
-1: Нет. Просто ... просто нет. Если вам когда-либо понадобится «изменить размер» текстуры, вы можете просто уничтожить ее и создать новый подходящий размер. Нет абсолютно никаких оснований делать это на месте внутри объекта текстуры –
Приветствую вас обоих, хорошо знать, что люди действительно используют эти функции, даже если может быть случай, если вы этого не сделаете. @Nicol: Это просто изменение размера, которое было проблемой, или вы находите удаление и изменение размера достаточно быстро для всех ваших потребностей? – Baggers
@NicolBolas Выделение текстур - вызов драйвера. Изменение размера текстуры может быть намного проще в драйвере, чем выделение новой текстуры, следовательно, быстрее. Мой собственный реальный опыт подтверждает это утверждение здесь (http://www.opengl.org/discussion_boards/showthread.php/156246-glGenTextures-DeleteTextures-performance) * Таким образом, если вы можете повторно использовать один и тот же объем памяти (скажем, текстуры имеет тот же формат и тот же размер), тогда гораздо эффективнее не освобождать текстуру *. Я также считаю, что причина в том, что это превратилось в спецификацию OpenGL. Спасибо за ваше мнение, – Ani