Нет, хранилище текстур будет освобождено только в том случае, если объект, который его использует, не привязан ни к одному из контекстов, которые его используют. Более того, он не освобождается неявно только потому, что 1 контекст уничтожен. Вы используете одно и то же пространство имен объектов для всех ваших общих контекстов, поэтому этого нельзя допустить (все контексты в общей группе должны быть уничтожены).
Каждый контекст поддерживает свой собственный набор связанных текстур, поэтому, если вы привязываете текстуру 1 к контексту A и B, затем удаляете контекст A текстура не может быть освобождена, пока вы также не удалите (или не отвяжете ее от) контекст B. Это поведение применимо и к вызову glDeleteTextures (...)
.
Эта функция будет неявно отвязывать текстуру (текстуры), которую вы передаете ей, из текущего (вызывающего) контекста, но пока она не будет отвязана в каком-либо другом контексте, память не может быть освобождена. Единственное, что произойдет немедленно, это то, что имя текстуры сразу станет повторно используемым и может быть возвращено последующим вызовом glGenTextures (...)
.
Короче говоря, в вашем случае память в конечном итоге будет освобождена (вы утверждаете, что собираетесь уничтожить все контексты). Просто он не обязательно сразу освободится, когда вы уничтожите свой первый контекст — сначала должны быть выполнены другие условия, описанные выше.
person
Andon M. Coleman
schedule
19.06.2014