Должен ли я использовать glDeleteTextures () в конце программы? - PullRequest
5 голосов
/ 09 января 2010

Видел, что в некоторых примерах кодов, но я никогда не использовал его, если я не динамически открываю новые текстуры разных размеров и т. Д.

Так что моя ОС или что-то другое заботится об освобождении памяти текстур, когда мое приложение закрывается? Или я должен освободить его сам?

Ответы [ 2 ]

4 голосов
/ 29 сентября 2011

Из документации по Android GLSurfaceView.Renderer:

public abstract void onSurfaceCreated (GL10 gl, EGLConfig config)

Начиная с: Уровень API 3 Вызывается, когда поверхность создается или воссоздается. Вызывается при запуске потока рендеринга и всякий раз, когда контекст EGL теряется. Контекст EGL обычно теряется, когда устройство Android просыпается после перехода в спящий режим. Поскольку этот метод вызывается в начале рендеринга, а также каждый раз, когда теряется контекст EGL, этот метод является удобным местом для размещения кода для создания ресурсов, которые должны быть созданы при запуске рендеринга и которые необходимо воссоздать когда контекст EGL потерян. Текстуры являются примером ресурса, который вы можете создать здесь. Обратите внимание, что при потере контекста EGL все ресурсы OpenGL, связанные с этим контекстом, будут автоматически удалены. Вам не нужно вызывать соответствующие методы "glDelete", такие как glDeleteTextures, чтобы вручную удалить эти потерянные ресурсы.

4 голосов
/ 09 января 2010

Как и любой другой ресурс, большинство ОС освободят их, если вы этого не сделаете.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...