Việc sử dụng chính của các đối tượng bộ đệm Vertex là gì?


8

Từ những gì tôi đã đọc, có vẻ như VBO hoàn toàn dành cho hiệu suất.

Tôi đang làm việc trong một dự án học tập rất thô sơ trong lwjgl và tôi chỉ đang cố gắng tìm ra những tính năng nâng cao hơn của thư viện mà tôi nên tìm hiểu và công dụng của chúng là gì.

Tôi hiểu rằng VBO cho phép một người giữ các đỉnh trong VRAM trong khi họ hiện không được vẽ trong một cảnh. Trong trường hợp của tôi, tôi chỉ vẽ tứ giác và hiệu suất có thể không phải là một mối quan tâm nào cả, nhưng tôi đang cố gắng ghép lại những gì đang diễn ra dưới mui xe. Nếu tôi đang vẽ quads trực tiếp, tôi đang vẽ từ bộ nhớ CPU, đúng không? Ngoài ra, nếu tôi không thực hiện bất kỳ kiểm tra nào về khả năng hiển thị, điều đó có nghĩa là tôi hiển thị hoàn toàn mọi thứ trong "cảnh", bất kể nó có trong tầm nhìn không? Có phải VBO là một cách để lưu trữ các đối tượng và chỉ hiển thị những gì cần thiết?

Câu trả lời:


10

Lưu ý về phạm vi: Không có thứ nào trong OpenGL là "Đối tượng đệm của Vertex". Có các đối tượng đệm đơn giản . Một đối tượng bộ đệm chỉ đơn giản là một mảng tuyến tính của bộ nhớ GPU mà bạn có thể phân bổ, điền dữ liệu, đọc và sử dụng theo nhiều cách khác nhau. Một trong những điều bạn có thể làm với các đối tượng bộ đệm là lưu trữ dữ liệu đỉnh trong chúng và sử dụng chúng làm mảng nguồn để kết xuất. Nhưng chúng có khá nhiều công dụng khác nữa .

Các đối tượng bộ đệm không phải là một cách để tránh sự loại bỏ bực bội hoặc các cấu trúc kiểu đồ thị cảnh khác. Khi được sử dụng cho dữ liệu đỉnh, các đối tượng bộ đệm chỉ lưu trữ dữ liệu đỉnh. Không có chúng, các glDrawElements/Arrays/etccuộc gọi của bạn sẽ lấy dữ liệu từ các mảng được lưu trong bộ đệm thành viên CPU. Khi sử dụng các đối tượng đệm để kết xuất, các mảng được kéo thay vì từ nội dung của đối tượng đệm.

Dữ liệu đỉnh của bạn đến từ đâu là sự khác biệt duy nhất giữa kết xuất với các đối tượng bộ đệm và kết xuất mà không có chúng. Vì vậy, không có sự chán nản loại bỏ. Không quản lý đồ thị cảnh. Không có gì. Nó chỉ là nơi lưu trữ dữ liệu đỉnh của bạn.


1
Tôi có thể làm rõ một chút và đề cập rằng tối ưu hóa thực sự bạn thực hiện bằng cách sử dụng VBO liên quan đến xe buýt giữa CPU và GPU, tương đối chậm (và gây tranh cãi). Nếu tốc độ bus này không đáng kể, hầu như không có sự khác biệt giữa việc sử dụng VBO và sử dụng mảng phao bên CPU.
thịt

1
Cũng đáng lưu ý rằng trình điều khiển của bạn có thể tự do lưu trữ các đối tượng bộ đệm bất cứ nơi nào nó muốn, kể cả trong bộ nhớ CPU.
Maximus Minimus

Bên cạnh đó, việc xây dựng VBO / VAO và chỉ cần gọi các bản vẽ trên đó là (imho) dễ dàng hơn việc phải lặp các chức năng đường ống cố định cho tất cả các đỉnh / mặt. Nó giống như nói với card đồ họa "hãy chạy hộp hình tam giác này qua shader đó" thay vì "Đi lấy đỉnh đó, đỉnh đó và đó, và tạo ra một tam giác nhỏ hạnh phúc ở đó. Bây giờ, hãy tiếp theo ...". Oh, đợi đã, bây giờ tôi đang tham gia vào shader nhiều hơn VBO.
Exilyth

2

Bộ đệm mảng OpenGL (= cái mà chúng tôi gọi là VBO) phục vụ một mục đích duy nhất: Giữ dữ liệu hình học của bạn bên trong bộ nhớ GPU chứ không phải bộ nhớ máy khách, do đó bạn sẽ không cần gửi lại mỗi khung hình.

Đơn giản vậy thôi :-)

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.