2010-01-09 11 views
5

Widziałem to w niektórych przykładowych kodach, ale nigdy go nie używałem, chyba że będę dynamicznie otwierać nowe tekstury o różnych rozmiarach itp.Czy muszę używać glDeleteTextures() na końcu programu?

Czy mój system operacyjny lub coś takiego zajmuje się zwalnianiem pamięci tekstury po zakończeniu mojej aplikacji? Czy muszę sam to uwolnić?

Odpowiedz

4

Podobnie jak w przypadku każdego innego zasobu, większość systemów operacyjnych zwolni je, jeśli tego nie zrobisz.

Zazwyczaj powodem jest to, aby nie przeciekać żadnego zasobu podczas pracy programu. Powiedzmy, że na przykład ładujesz poziomy, jeśli nie uwolnisz wszystkich tekstur, gdy będziesz ładował poziomy, wcześniej czy później zabraknie Ci pamięci. Śledzenie wycieków jest łatwiejsze, jeśli czyścisz przy wyjściu.

3

z Android dokumentacji GLSurfaceView.Renderer:

public abstract void onSurfaceCreated (GL10 gl, EGLConfig config) 

od: API Level 3 wywoływana, gdy powierzchnia jest tworzony lub odtworzone. Wywoływany, gdy wątek renderowania jest uruchamiany, a także w przypadku utraty kontekstu EGL. Kontekst EGL zwykle będzie tracony, gdy urządzenie z Androidem zostanie przebudzone po przejściu w stan uśpienia. Ponieważ ta metoda jest wywoływana na początku renderowania, a także za każdym razem, gdy utracono kontekst EGL, ta metoda jest wygodnym miejscem do umieszczenia kodu w celu utworzenia zasobów, które należy utworzyć, gdy rozpoczyna się renderowanie, i które muszą być odtwarzane po utracie kontekstu EGL. Tekstury są przykładem zasobu, który możesz tutaj utworzyć. Należy pamiętać, że po utracie kontekstu EGL, wszystkie zasoby OpenGL powiązane z tym kontekstem zostaną automatycznie usunięte. Nie trzeba wywoływać odpowiednich metod "glDelete", takich jak glDeleteTextures, aby ręcznie usunąć te utracone zasoby.

Powiązane problemy