2011-07-13 38 views
5

Tôi đang tạo trò chơi cho iOS và Android. Tôi đã nhìn thấy ở rất nhiều nơi mà việc vẽ bằng cách sử dụng chỉ mục hiệu quả hơn là chỉ vẽ mảng hình tam giác.glDrawElements vs glDrawArray hiệu quả

Điều này là tôi đang sử dụng các đỉnh bị nén (như định dạng tệp md2) và chỉ mất ít hơn chỉ các chỉ mục - Mảng: N * 3 (xyz) * 1 (uchar) + dịch (12 byte) + tỷ lệ (12 byte). Yếu tố: N * 3 (xyz) * 4 (uint) + Mảng/~ 10

Dường như mảng thậm chí còn là lựa chọn tốt hơn so với phần tử đã được lập chỉ mục và nén, công cụ hồ sơ OpenGL của Apple nói rằng tôi nên sử dụng glDrawElements ..

Việc triển khai OpenGL có thích mảng được lập chỉ mục không? hoặc đó là vì mảng được lập chỉ mục chứa ít dữ liệu hơn mảng không nén thường xuyên?

p.s. Tôi đang sử dụng OpenGL es 2.0 và vertex shader là một trong những người giải nén các đỉnh.

Trả lời

1

Sử dụng glDrawElements() sẽ tiết kiệm một lượng bộ nhớ đáng kể và bạn có thể chỉ định các phần tử mảng theo thứ tự bất kỳ.

Sử dụng glDrawArrays(), tuy nhiên, tùy chọn duy nhất của bạn là lặp lại tuần tự trong danh sách.

Bạn phải thử nghiệm.

3

Bạn có đang sử dụng Vertex Arrays hoặc Vertex Buffer Objects không? Nếu bạn đang sử dụng Vertex Mảng, thì bạn có thể cân nhắc xem xét glDrawRangeElements thay vì glDrawElements.

Trừ khi tất cả các ô của bạn có các đỉnh riêng biệt (không chắc), glDrawElements sẽ nhanh hơn glDrawArrayglDrawElements sẽ tận dụng lợi thế của thực tế là các đỉnh lặp lại sẽ được tải vào bộ nhớ cache của gpu và sẽ không phải tải thêm hơn một lần cho mỗi poly mà đỉnh đó là một phần của. Tuy nhiên, với glDrawArray, nó sẽ lặp qua mảng và không thể kết hợp các đỉnh tương tự, do đó, nó sẽ phải tải chúng nhiều lần.

Tuy nhiên, điều này luôn tùy thuộc vào tình huống cụ thể của bạn. Hãy thử sử dụng một hồ sơ hoặc nhận được một tốc độ khung hình bằng cách sử dụng từng phương pháp này. Không nên quá khó để chuyển đổi giữa chúng. Nếu một rõ ràng là tốt hơn, hãy sử dụng cái đó. Nếu không tốt hơn, thì có lẽ nó không quan trọng quá nhiều.

Hãy nhớ rằng, tối ưu hóa sớm là gốc rễ của mọi điều ác. Chúc may mắn! :)