Xen kẽ - tất cả dữ liệu đỉnh (vị trí, bình thường, texcoord ...) được giữ trong 1 bộ đệm đỉnh, riêng biệt - mỗi thuộc tính đỉnh được giữ trong một bộ đệm đỉnh riêng biệt (1 cho vị trí, 1 cho quy tắc ...).
Tôi biết câu hỏi này đã xuất hiện nhiều lần và tôi cũng biết không có câu trả lời đúng 1 (đáng buồn thay). Nhưng tôi muốn thử liệt kê những ưu điểm / nhược điểm chính của cả hai. Hoặc có thể bạn có một số quy tắc chung về thời điểm sử dụng.
Ưu điểm của xen kẽ:
- nhanh hơn? (tất cả dữ liệu cho 1 đỉnh được tải cùng một lúc? sth về bộ đệm hoạt động tốt hơn)?
- các lệnh gọi API ít hơn (để tạo và thiết lập bộ đệm nhưng đó có thể là một sự khác biệt rất nhỏ)
Ưu điểm riêng biệt:
- khi các shader khác nhau cần các thuộc tính đỉnh khác nhau (ví dụ: một shader chỉ cần vị trí và một vị trí cần khác, bình thường và texcoord), có thể chỉ cung cấp cho mỗi shader dữ liệu mà nó cần và không có sự trùng lặp dữ liệu
- khi chỉ cập nhật vị trí của các đỉnh, không cần thiết phải gửi lại dữ liệu thuộc tính khác (ví dụ: chuẩn và texcoords)
Nếu bạn thấy bất kỳ sự khác biệt khác xin vui lòng viết. Nhìn từ trên, nó trông giống như một cuộc đấu tranh giữa tối ưu hóa hiệu năng và bộ nhớ. Nhưng có lẽ tôi đã sai? Có lẽ một là tốt hơn / tồi tệ hơn trong hầu hết các trường hợp?
Chỉnh sửa: Thực sự là một mối quan tâm nữa - với các bộ đệm xen kẽ, cuối cùng tôi có thể gửi dữ liệu không cần thiết đến GPU và băng thông dữ liệu là một nút cổ chai lớn trong các thẻ ngày nay. Tôi có nên lo lắng về điều đó?