2012-02-13 32 views
13

Tôi đang viết trò chơi 2D/3D hỗn hợp trên Android và tôi không thể xác định lượng bộ nhớ họa tiết mà tôi có thể sử dụng. Có cách nào để xác định bộ nhớ kết cấu tối đa trong OpenGL ES không?Cách xác định bộ nhớ kết cấu tối đa trên Android OpenGL ES

Tôi có bộ nhớ cache kết cấu của riêng mình và muốn biết ngưỡng tối đa của bộ nhớ kết cấu. Tôi đang ước tính gần đúng bằng cách sử dụng activityManager.getMemoryInfo(mi), nhưng trên một số thiết bị khi tôi cố gắng phân bổ kết cấu (và nhiều thiết bị khác đã có trong bộ nhớ), ứng dụng gặp sự cố (EGL_BAD_ALLOC). Khi tôi đặt ngưỡng này thành giá trị thấp hơn, mọi thứ có vẻ ổn. Có ai có ý kiến ​​gì không? Hoặc cuối cùng làm thế nào để xác định rằng việc phân bổ kết cấu đã không thành công, thay vì bị rơi.

Trả lời

4

Dường như bạn đang cố gắng biết amout của VRAM (RAM video) khả dụng. The question has already been partially answered.

Tuy nhiên, lượng VRAM không xác định số lượng họa tiết sẽ phù hợp với nó: những thứ này có thể được nén, số lượng VRAM có thể thay đổi do ứng dụng khác và chúng tôi không biết bao nhiêu bộ nhớ trình điều khiển video sử dụng.

Phương pháp 1

From this topic, bạn có thể nhận được số tiền tối đa của các đơn vị kết cấu; đó có nghĩa là số lượng tối đa có thể bị ràng buộc cùng một lúc:

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

And from this other one, bạn có thể lấy kích thước họa tiết tối đa:

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

Vì vậy, một cách logic, bạn có thể ít nhất là phù hợp maxSize[0] ² × maxNum[0] pixel trong VRAM mà không gặp sự cố. Ngay cả khi VRAM hết dung lượng, trình điều khiển đồ họa sẽ quản lý nó cho chúng tôi (mà có thể bao gồm sự cố ứng dụng trong trường hợp đói).

Dù sao, có thể bạn sẽ không điều chỉnh kích thước họa tiết của mình tùy thuộc vào số lượng VRAM hoặc các pixel có sẵn; nó có thể nhưng không mang lại lợi nhuận, di động và khó thực hiện đúng cách. Có một cách cách tốt hơn để làm điều này:

Phương pháp 2

99% thời gian, amout VRAM trên chip đồ họa là tỷ lệ thuận với kích thước màn hình. Do đó, use the screen's DPI (ldpi, mdpi, hdpi, xhdpi) để xác định phiên bản (kích thước) của kết cấu cần tải (thử nghiệm với các thiết bị khác nhau), vì vậy bạn an toàn về "nó có phù hợp với thiết bị đó không?".

Các vấn đề liên quan