Tôi đã đọc this bài viết, và tác giả viết:Có hủy bỏ hiệu suất chương trình trong OpenGL không?
Dưới đây là làm thế nào để viết các ứng dụng hiệu suất cao trên mọi nền tảng trong hai bước đơn giản:
[...]
Thực hiện theo thông lệ tốt nhất. Trong trường hợp của Android và OpenGL, điều này bao gồm những thứ như "cuộc gọi vẽ theo lô", "không sử dụng loại bỏ trong trình phát phân đoạn", v.v.
Tôi chưa bao giờ nghe nói rằng việc hủy bỏ sẽ có tác động xấu đến hiệu suất hoặc như vậy và đã sử dụng nó để tránh pha trộn khi alpha chi tiết không cần thiết.
Ai đó có thể giải thích lý do tại sao và khi sử dụng loại bỏ có thể bị coi là hành vi không tốt và cách loại bỏ + chiều sâu so sánh với alpha + blend?
Chỉnh sửa: Sau khi nhận được câu trả lời cho câu hỏi này, tôi đã thực hiện một số thử nghiệm bằng cách hiển thị gradient nền có tứ kết cấu trên đầu trang đó.
- Sử dụng GL_DEPTH_TEST và fragment-shader kết thúc với dòng "
if( gl_FragColor.a < 0.5){ discard; }
" đã về 32 fps. - Xóa câu lệnh if/discard khỏi trình tạo phân đoạn đã tăng tốc độ hiển thị tới khoảng 44 fps.
- Sử dụng GL_BLEND với hàm pha trộn "(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)" thay vì GL_DEPTH_TEST cũng dẫn đến khoảng 44 fps.
Câu hỏi rất thú vị, tôi hy vọng ai đó sẽ có thể trả lời câu hỏi đó. – bvd