Tôi đang mã hóa ứng dụng OpenGL ES 1.1 dành cho Android và iPhone. Các công cụ OpenGL ES sống trong một thư viện được chia sẻ và được truy cập thông qua NDK trên Android.OpenGL trên Android so với iOS: tối ưu hóa và nơi chúng khác nhau
Tôi đang tìm cách tối ưu hóa hiệu suất OpenGL của mình. Có rất nhiều định dạng phim và nguồn tài nguyên trên mạng, ví dụ .:
http://www.vizworld.com/2010/02/ngmocos-tim-omernick-optimizing-opengl-iphone/
OpenGL ES 2.0 : Seeking VBO Performance/Optimisation Tips For Many Moving Vertices
When are VBOs faster than "simple" OpenGL primitives (glBegin())?
https://gamedev.stackexchange.com/questions/1068/opengl-optimization-tips
Nhưng kỹ thuật nói chung có được nổi tiếng áp dụng phổ biến, chẳng hạn như:
- đối tượng sử dụng đỉnh đệm (VBOs)
- Giảm thiểu tình trạng OpenGL thay đổi
- Sử dụng kết cấu atlassing nếu có thể để tránh việc phải chọn nhiều họa tiết khác nhau
Một số kỹ thuật có thể nhạy cảm hơn một chút trong các chi tiết cụ thể và có thể khác nhau giữa Android và iPhone và đó là những gì tôi quan tâm. le:
- Làm xen kẽ dữ liệu đỉnh của bạn bên trong mỗi đỉnh: ví dụ: phối hợp đỉnh; phối hợp kết cấu; bình thường. Có một thứ tự ưa thích của các mục trong interleaving?
- Đưa từng đỉnh sang bội số tiếp theo của một số byte. Tôi nhìn thấy số 32 bandied về, nhưng cũng đã thấy 4 hoặc 8 ở một số nơi.
- Xem xét sử dụng một đoạn ngắn hoặc tương tự cho mỗi của Vertex phối hợp, chứ không phải là một phao
Vì vậy, câu hỏi của tôi là: là những gì các chi tiết tốt hơn của optimisations kỳ diệu như trong danh sách cuối cùng trên định khác nhau giữa Android và iPhone ? Nơi chúng khác nhau, chiến lược tốt nhất là gì? Chỉ cần sử dụng một giá trị phù hợp với cả hai thế giới? (Tinh chỉnh chi tiết như vậy trong thời gian chạy tùy thuộc vào nền tảng có thể là một chút trên đầu trang?)
Tôi không có chuyên gia trong lĩnh vực này, nhưng AFAIK tối ưu hóa chủ yếu phụ thuộc vào chip cơ bản. IPhone là (một chút) phù hợp hơn trong các chip GPU, nhưng trong Android bạn có thể có một số chip GPU: Adreno 2xx, PowerVR SGXxxx, Malixxx, Tegra2. Có sự khác biệt về chức năng. Ngoài ra, chỉ cần ra khỏi tò mò? Tại sao bạn sử dụng 1,1 và không 2.0? Tôi nghĩ rằng với các shaders có thể lập trình, bạn có thể tối ưu hóa mã tốt hơn (và tất nhiên ứng dụng của bạn sẽ hỗ trợ ít thiết bị hơn ... nhưng AFAIK hiện nay mỗi thiết bị Android supoorts 2.0) –
Đối với việc sử dụng OpenGL ES1.1: Đó là vấn đề hỗ trợ một số thiết bị cũ hơn . Điểm tốt về chipset! – MeinHeinlein