Cách tiếp cận "bộ nhớ phong phú vì vậy tôi không cần phải xóa" là xấu, và cách tiếp cận "bộ nhớ là phong phú, vì vậy tôi sẽ không bao giờ thoát khỏi lỗi bộ nhớ" là thiếu sót.
Quản lý bộ nhớ OpenGL bị che khuất, vì lý do kỹ thuật (xem nhận xét của t.niese ở trên) và vì lý do ý thức hệ ("bạn không cần biết, bạn không muốn biết"). Mặc dù có phần mở rộng của nhà cung cấp (chẳng hạn như ATI_meminfo) cho phép bạn truy vấn một số số không ủy quyền số (không ủy quyền khi chúng có thể thay đổi mili giây tiếp theo và chúng không có hiệu ứng như phân mảnh vào tài khoản).
Nói chung, phần lớn giả định rằng bạn có thể sử dụng nhiều bộ nhớ hơn là bộ nhớ GPU chính xác.
Tuy nhiên, bạn thường không thể sử dụng tất cả bộ nhớ khả dụng.Nhiều khả năng, có giới hạn dưới "tất cả RAM sẵn có" do những hạn chế về vùng bộ nhớ (và các vùng lớn) mà trình điều khiển có thể cấp phát, khóa và DMA đến/từ. Và mặc dù bạn thường có thể sử dụng nhiều bộ nhớ hơn sẽ phù hợp trên GPU (ngay cả khi bạn sử dụng nó độc quyền), điều này không có nghĩa là phân bổ bất cẩn không thể và sẽ không cuối cùng không thành công.
Thông thường, nhưng không nhất thiết, bạn tiêu thụ càng nhiều bộ nhớ hệ thống như bộ nhớ GPU, quá (không biết, trình điều khiển thực hiện điều đó một cách bí mật). Vì trình điều khiển hoán đổi tài nguyên trong và ngoài khi cần, nó cần duy trì một bản sao. Đôi khi, cần giữ 2 hoặc 3 bản sao (ví dụ: khi phát trực tuyến hoặc cho các hoạt động ARB_copy_buffer). Đôi khi, ánh xạ một đối tượng đệm là một bản sao khác trong một khối được phân bổ đặc biệt và đôi khi bạn được phép viết thẳng vào bộ nhớ của trình điều khiển. Mặt khác, PCIe 2.0 (và PCIe 3.0 thậm chí còn hơn thế nữa) đủ nhanh để truyền các đỉnh từ bộ nhớ chính, vì vậy bạn thậm chí không cần bộ nhớ GPU (trừ bộ đệm nhỏ). Một số trình điều khiển sẽ truyền trực tiếp hình động ngay từ bộ nhớ hệ thống.
Một số GPU thậm chí không có bộ nhớ hệ thống và GPU riêng biệt (Intel Sandy Bridge hoặc AMD Fusion).
Ngoài ra, bạn nên lưu ý rằng việc xóa các đối tượng không nhất thiết phải xóa chúng (ít nhất là không phải ngay lập tức). Thông thường, với rất ít trường hợp ngoại lệ, việc xóa đối tượng OpenGL chỉ đơn thuần là xóa dự kiến ngăn cản bạn tham khảo thêm đối tượng. Trình điều khiển sẽ giữ cho đối tượng có giá trị miễn là cần thiết.
Mặt khác, bạn thực sự cần xóa những gì bạn không cần nữa, và bạn nên xóa sớm. Ví dụ, bạn nên xóa một shader ngay lập tức sau khi gắn nó vào đối tượng chương trình. Điều này đảm bảo rằng bạn không bị rò rỉ tài nguyên, và nó được đảm bảo để làm việc. Xóa và xác định lại bộ đệm đỉnh hoặc điểm ảnh được sử dụng khi phát trực tuyến (bằng cách gọi glBufferData(... NULL);
là thành ngữ nổi tiếng. Điều này chỉ ảnh hưởng đến chế độ xem của đối tượng và cho phép người lái tiếp tục sử dụng đối tượng cũ song song với . miễn là nó cần phải
Vì quản lý bộ nhớ phụ thuộc vào hệ thống (có thể khác với hệ thống) và nhiều ứng dụng có thể sử dụng OpenGL cùng lúc bạn không thể chắc chắn rằng bạn có thể sử dụng toàn bộ bộ nhớ mà cạc đồ họa có. Vì vậy, bạn sẽ không nhận được xung quanh để có một _resource quản lý riêng. Điều này có thể là từ sự can thiệp cho bạn: [Xác định bộ nhớ video sẵn có] (http://stackoverflow.com/questions/4552372/determining-available-video-memory) –
Có trình điều khiển nên thực hiện điều đó. Tuy nhiên nó có thể rất chậm khi nó bắt đầu trao đổi kết cấu. – jcoder