簡體   English   中英

如何確定Android OpenGL ES上的最大紋理內存

[英]How to determine maximum texture memory on Android OpenGL ES

我正在Android上編寫混合2D / 3D游戲,但無法確定可以使用多少紋理內存。 有什么方法可以確定OpenGL ES中的最大紋理內存?

我有自己的紋理緩存,想知道紋理內存的最大閾值。 我正在使用activityManager.getMemoryInfo(mi)進行近似估算,但是在某些設備上,當我嘗試分配紋理(並且內存中已經有更多的紋理)時,應用程序崩潰( EGL_BAD_ALLOC )。 當我將此閾值設置為較低的值時,一切似乎正常。 有誰有想法嗎? 或者最終如何確定紋理分配不成功,而不是崩潰。

看來您正在嘗試了解可用的VRAM(視頻RAM)的優勢。 該問題已得到部分回答。

但是,VRAM的數量並不能確定其中可以容納多少紋理:這些紋理可以壓縮,VRAM的數量可以由於另一個應用程序而改變,並且我們不知道視頻驅動程序使用多少內存。

方法1

從本主題中 ,您可以獲取最大數量的紋理單位。 這意味着可以同時綁定的最大數量:

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

然后從另一個中 ,可以檢索最大紋理大小:

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

因此,從邏輯maxNum[0] ,您至少可以在VRAM中容納maxSize[0] ²× maxNum[0]像素,而不會出現問題。 即使VRAM空間不足,圖形驅動程序也會為我們管理它(在飢餓的情況下可能會導致應用程序崩潰)。

無論如何,您可能不會根據VRAM數量或可用像素來調整紋理的大小。 這是可能的,但沒有盈利,可移植且難以正確實施的情況。 有一種方法更好的方式來做到這一點:

方法2

在99%的時間中,圖形芯片上VRAM的大小與屏幕尺寸成正比。 因此, 使用屏幕的DPI(ldpi,mdpi,hdpi,xhdpi)來確定要加載的紋理的版本(大小)(使用不同的(實際)設備進行實驗),因此“在此情況下適合”是很安全的設備?”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM