2012-02-13 17 views
13

Piszę mieszaną grę 2D/3D na Androida i nie jestem w stanie określić, ile pamięci tekstury mogę użyć. Czy istnieje sposób na określenie maksymalnej pamięci tekstury w OpenGL ES?Jak określić maksymalną pamięć tekstury w systemie Android OpenGL ES

Mam własną pamięć podręczną tekstury i chcę poznać maksymalny próg pamięci tekstury. Dokonuję przybliżonej oceny przy użyciu activityManager.getMemoryInfo(mi), ale na niektórych urządzeniach, gdy próbuję przydzielić teksturę (i wiele innych jest już w pamięci), aplikacja ulega awarii (EGL_BAD_ALLOC). Kiedy ustawiam ten próg na niższą wartość, wszystko wydaje się być w porządku. Czy ktokolwiek ma jakiś pomysł? Albo ostatecznie, jak ustalić, że alokacja tekstury zakończyła się niepowodzeniem, zamiast awarii.

Odpowiedz

4

Wygląda na to, że próbujesz poznać dostępność VRAM (wideo RAM). The question has already been partially answered.

Jednak ilość VRAM nie określa ile tekstury zmieści się w nim: te z nich może być skompresowany, ilość VRAM można zmienić z powodu innej aplikacji, a nie wiemy, ile pamięci używa sterownika wideo.

Metoda 1

From this topic, można uzyskać maksymalną ilość jednostek tekstur; co oznacza, że ​​maksymalna liczba, która może być związana w tym samym czasie:

int[] maxSize = new int[1]; 
gl.glGetIntegerv(GL10.GL_MAX_TEXTURE_SIZE, maxSize, 0); 

And from this other one można pobierać maksymalny rozmiar tekstury:

int[] maxNum = new int[1]; 
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, maxNum, 0); 

Więc logicznie, można przynajmniej nadające maxSize[0] ² × maxNum[0] pikseli w pamięci VRAM bez problemów. Nawet jeśli w pamięci VRAM zabraknie miejsca, sterownik graficzny poradzi sobie z nami (który może zawierać awarię aplikacji w przypadku głodu).

W każdym razie, prawdopodobnie nie dostosujesz rozmiaru twoich tekstur w zależności od ilości VRAM lub dostępnych pikseli; jest to możliwe, ale nie opłacalne, przenośne i trudne do wdrożenia. Jest drogę lepszy sposób to zrobić:

Metoda 2

99% od czasu, amout VRAM na chipie graficznym jest proporcjonalna do wielkości ekranu. Tak więc, use the screen's DPI (ldpi, mdpi, hdpi, xhdpi), aby określić, którą wersję (rozmiar) tekstury załadować (eksperymentować z różnymi (rzeczywistymi) urządzeniami), więc jesteś bezpieczny o "czy pasuje do tego urządzenia?".

Powiązane problemy