Đang xem xét chuyển từ XNA sang API của 3D3D (Molehill). Vì vậy, khi kiểm tra hiệu năng tôi đã triển khai thực hiện theo đợt sprite, nhưng hiệu suất không tuyệt vời lắm, trong khi với XNA, tôi có thể dễ dàng rút ra tới 500 000 quads nhưng với triển khai Molehill của tôi, tôi có thể rút ra khoảng 1000 quads và trong khi sự khác biệt hiệu năng khá ấn tượng đã được dự kiến ở phía CPU, điều này là do bị ràng buộc GPU.
Vì vậy, hiện tại việc thực hiện như sau.
set render states
let texture be null
let batchSize be arbitrary
for each sprite in queue
if texture is not sprite texture
or buffers are full
upload vertex data to index buffer
upload index data to vertex buffer
bind texture
draw triangles
flush vertex data
flush index data
add sprite vertices to vertex data
add sprite indices to index data
end
upload remaining vertex data to vertex buffer
upload remaining index data to index buffer
draw remaining triangles
flush data
Nút thắt đang tải lên bộ đệm, nhưng để triển khai tốt hơn, tôi hy vọng có một cuộc thảo luận ở đây.
Chúc mừng.
Sửa đổi:
Một tối ưu hóa xuất hiện trong đầu là duy trì bộ đệm chỉ mục, vì các chỉ số có thể dự đoán được và sẽ luôn tuân theo cùng định dạng. Đang đi đến điểm chuẩn mà bây giờ.
Bộ nhớ đệm bộ đệm chỉ mục không có hiệu suất tăng đáng chú ý, vì vậy, trong nỗ lực cố gắng hiểu nút thắt ở đâu, tôi đã chuyển nó sang C # / XNA, chậm hơn một chút so với triển khai của Microsoft nhưng vẫn có dung lượng GPU hơn 500 lần so với việc thực hiện Molehill.
Có phải Molehill chỉ đơn giản là một lớp trừu tượng cực kỳ xấu?