Tôi đang làm việc trên một trò chơi PC dựa trên gạch nhỏ / sprite với một nhóm người và chúng tôi đang gặp vấn đề về hiệu suất. Lần cuối cùng tôi sử dụng OpenGL là vào khoảng năm 2004, vì vậy tôi đã tự dạy mình cách sử dụng hồ sơ cốt lõi và tôi cảm thấy hơi bối rối.
Tôi cần vẽ trong vùng lân cận 250-750 viên gạch 48x48 vào màn hình mỗi khung hình, cũng như có thể khoảng 50 họa tiết. Các ô chỉ thay đổi khi một cấp độ mới được tải và các họa tiết luôn thay đổi. Một số gạch được tạo thành từ bốn mảnh 24x24, và hầu hết (nhưng không phải tất cả) các họa tiết có cùng kích thước với gạch. Rất nhiều gạch và họa tiết sử dụng trộn alpha.
Ngay bây giờ tôi đang làm tất cả những điều này trong chế độ ngay lập tức, mà tôi biết là một ý tưởng tồi. Tất cả đều giống nhau, khi một thành viên trong nhóm của chúng tôi cố gắng chạy nó, anh ta có tốc độ khung hình rất tệ (~ 20-30 khung hình / giây), và điều tồi tệ hơn khi có nhiều gạch, đặc biệt là khi nhiều gạch đó là loại được cắt thành miếng. Tất cả điều này khiến tôi nghĩ rằng vấn đề là số lượng các cuộc gọi rút thăm được thực hiện.
Tôi đã nghĩ ra một vài giải pháp khả thi cho vấn đề này, nhưng tôi muốn điều hành chúng bởi một số người biết họ đang nói về cái gì nên tôi không lãng phí thời gian vào thứ gì đó ngu ngốc:
GẠCH
- Khi một mức được tải, vẽ tất cả các ô một lần vào bộ đệm khung được gắn với một kết cấu bấm còi lớn và chỉ cần vẽ một hình chữ nhật lớn với kết cấu đó trên mỗi khung.
- Đặt tất cả các ô vào một bộ đệm đỉnh tĩnh khi mức được tải và vẽ chúng theo cách đó. Tôi không biết liệu có cách nào để vẽ các đối tượng có kết cấu khác nhau bằng một lệnh gọi đến glDrawElements hay không, nếu đây thậm chí là điều tôi muốn làm. Có lẽ chỉ cần đặt tất cả các viên gạch vào một kết cấu khổng lồ lớn và sử dụng tọa độ kết cấu vui nhộn trong VBO?
XUÂN:
- Vẽ mỗi sprite với một lệnh gọi riêng đến glDrawElements. Điều này dường như liên quan đến rất nhiều chuyển đổi kết cấu, mà tôi đã nói là xấu. Là mảng kết cấu có thể hữu ích ở đây?
- Sử dụng một VBO năng động nào đó. Câu hỏi kết cấu tương tự như số 2 ở trên.
- Điểm spites? Điều này có lẽ là ngớ ngẩn.
Có bất kỳ ý tưởng trong số này là hợp lý? Có một triển khai tốt ở đâu đó tôi có thể xem qua?