glDrawElements vs glDrawArrays cho đa giác không sử dụng lại các đỉnh


7

Nó là tốt hơn để sử dụng glDrawElementshoặc glDrawArrayskhi không sử dụng lại đỉnh? Có phải có một số khác biệt, nếu không mọi người sẽ luôn luôn sử dụng glDrawElements?

Tôi cho rằng câu hỏi có thể được đặt lại như sau:

glDrawElementschức năng giống như glDrawArrayskhi nó được thông qua một bảng chỉ mục trống?

Câu trả lời:


7

glDrawElements()không hỗ trợ "bảng chỉ số trống". glDrawElements()phải luôn được cung cấp dữ liệu rõ ràng về thứ tự các chỉ số đỉnh sẽ được vẽ, bằng cách sử dụng một con trỏ tới bộ nhớ đệm (chỉ OpenGL <= 2.1) hoặc bù vào VBO bị ràng buộc.

glDrawArrays()hành động như thế glDrawElements()nếu nó đã được cung cấp một mảng các giá trị [0, 1, 2, ..., n], trong đó 'n' là countgiá trị được truyền vào một trong hai hàm.

Về lý thuyết, glDrawArrays()yêu cầu ít dữ liệu hơn glDrawElements()(theo thứ tự các chỉ số là ẩn, thay vì yêu cầu một khối dữ liệu được chuyển đến GPU), và do đó, nó sẽ nhanh hơn một chút nếu dữ liệu của bạn ở định dạng đó. Nhưng trong thực tế, sự khác biệt dường như không đáng để lo lắng.


Ồ dĩ nhiên rồi. Tôi không nên vội vàng khi viết bài này, bởi "bảng chỉ mục trống" Tôi có nghĩa là một bảng chỉ mục sẽ không có bất kỳ chỉ số được sử dụng lại (0, 1, 2, 3). Nhưng đây là câu trả lời chính xác mà tôi đang tìm kiếm! Trevor đánh giá cao.
badcc
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.