Tôi thấy rằng OpenGL phiên bản 3 trở lên loại bỏ việc sử dụng kết xuất phía máy khách. Chế độ ngay lập tức đã bị loại bỏ và các mảng đỉnh dường như không được chấp nhận. Thay vào đó, nếu tôi hiểu chính xác, VBO là cách chính để kết xuất các đỉnh.
Mặc dù tôi thấy logic đằng sau việc có một cách thống nhất để hiển thị mọi thứ, nhưng đó có phải là trường hợp VBO không có nhược điểm lớn so với mảng đỉnh? Tôi nghĩ rằng VBO được cho là bộ đệm lớn chứa> 1 MB dữ liệu, nói chung. Nếu tôi có một cảnh có nhiều hình học nhỏ hơn thì sao? Tôi có một biểu đồ cảnh với số lượng lớn các nút, mỗi nút cần biến đổi riêng, v.v ... Mỗi nút cũng có thể được xóa riêng, thêm vào riêng, v.v. Tôi đã sử dụng mảng đỉnh trước đó. Vì vậy, câu hỏi đầu tiên của tôi là liệu, nếu tôi chuyển sang VBO, sẽ có một chi phí lớn hơn cho các đối tượng biểu đồ cảnh của tôi bây giờ vì VBO cần được phân bổ cho từng đối tượng.
Một mối quan tâm khác là hình học mà tôi kết xuất có thể rất năng động. Trong trường hợp xấu nhất, có thể đôi khi tất cả hình học cần phải bực bội mọi khung hình trong một khoảng thời gian. Các VBO sẽ có hiệu suất kém hơn các mảng đỉnh trong trường hợp sử dụng này hay các VBO tồi tệ nhất có hoạt động nhiều như các mảng đỉnh nhưng không còn nữa không?
Vì vậy, trong định dạng ngắn gọn hơn, câu hỏi của tôi là:
1) Có chi phí đáng kể để phân bổ / phân bổ VBO không (ý tôi là hành động đơn thuần là thiết lập bộ đệm)?
2) Nếu tôi đang cập nhật dữ liệu từ CPU mọi khung hình, điều này có thể tệ hơn đáng kể so với việc tôi đã sử dụng mảng đỉnh không?
Và cuối cùng, tôi muốn biết:
3) Nếu câu trả lời cho một trong các câu hỏi trên là "có", tại sao lại từ chối các chế độ kết xuất khác có thể có lợi thế hơn VBO? Có điều gì tôi đang thiếu ở đây, như các kỹ thuật tôi phải sử dụng để giảm thiểu một số chi phí phân bổ tiềm năng này, v.v.?
4) Các câu trả lời cho bất kỳ câu hỏi nào trong số này có thay đổi đáng kể tùy thuộc vào phiên bản OpenGL nào tôi đang sử dụng không? Nếu tôi cấu trúc lại mã của mình để tương thích với OpenGL 3 hoặc 4 bằng cách sử dụng VBO theo cách hiệu quả, thì các kỹ thuật tương tự sẽ có khả năng hoạt động tốt với OpenGL 2 hoặc có khả năng các kỹ thuật nhất định nhanh hơn nhiều với OpenGL 3 + và những người khác với OpenGL 2?
Tôi đã hỏi câu hỏi này về stack overflow, nhưng tôi đang đăng lại ở đây vì tôi nhận ra trang web này có thể phù hợp hơn cho câu hỏi của tôi.