[英]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.