Tôi đang phát triển một trò chơi 2D dựa trên sprite cho (các) nền tảng di động và tôi đang sử dụng OpenGL (thật ra là Irrlicht) để kết xuất đồ họa. Đầu tiên tôi thực hiện kết xuất sprite theo cách đơn giản: mọi đối tượng trò chơi được kết xuất thành một hình tứ giác với lệnh gọi rút thăm GPU riêng, nghĩa là nếu tôi có 200 đối tượng trò chơi, tôi đã thực hiện 200 cuộc gọi rút thăm mỗi khung hình. Tất nhiên đây là một lựa chọn tồi và trò chơi của tôi hoàn toàn bị ràng buộc bởi CPU vì có một chút chi phí CPU được xác định trong mỗi cuộc gọi rút thăm GPU. GPU không hoạt động trong hầu hết thời gian.
Bây giờ, tôi nghĩ rằng tôi có thể cải thiện hiệu suất bằng cách thu thập các đối tượng thành các lô lớn và hiển thị các lô này chỉ bằng một vài cuộc gọi rút thăm. Tôi đã triển khai thực hiện theo đợt (để mọi đối tượng trò chơi có cùng kết cấu được hiển thị trong cùng một đợt) và nghĩ rằng các vấn đề của tôi đã biến mất ... chỉ để biết rằng tốc độ khung hình của tôi thậm chí còn thấp hơn trước.
Tại sao? Chà, tôi có 200 (hoặc nhiều hơn) các đối tượng trò chơi và chúng được cập nhật 60 lần mỗi giây. Mỗi khung hình tôi phải tính toán lại vị trí mới (dịch và xoay) cho các đỉnh trong CPU (GPU trên nền tảng di động không hỗ trợ kích hoạt nên tôi không thể thực hiện ở đó) và thực hiện phép tính này 48000 mỗi giây (200 * 60 * 4 kể từ khi mỗi sprite có 4 đỉnh) đơn giản là dường như quá chậm.
Tôi có thể làm gì để cải thiện hiệu suất? Tất cả các đối tượng trò chơi đang di chuyển / xoay (gần như) mọi khung hình vì vậy tôi thực sự phải tính toán lại các vị trí đỉnh. Chỉ tối ưu hóa mà tôi có thể nghĩ đến là một bảng tra cứu các phép quay để tôi không phải tính toán chúng. Điểm spites sẽ giúp đỡ? Bất kỳ hack khó chịu? Còn gì nữa không?
Cảm ơn.