Tôi đang làm việc trên một ứng dụng C++ OpenGL dựa trên Linux, sử dụng trình điều khiển Nvidia 290.10 64 bit. Tôi đang cố gắng giảm dung lượng bộ nhớ vì nó sử dụng khá nhiều dữ liệu trực tiếp.Sử dụng heap libGL
Tôi đã sử dụng valgrind/massif để phân tích mức sử dụng heap và trong khi nó giúp tôi tối ưu hóa nhiều thứ khác nhau, bây giờ phần lớn nhất bộ nhớ heap được sử dụng được phân bổ bởi libGL. Không có vấn đề làm thế nào tôi thiết lập ngưỡng, massif không cho tôi xem chi tiết nơi mà những phân bổ đến từ, chỉ cần đó là libGL. Vào thời điểm cao điểm, tôi thấy khoảng 250MB được phân bổ bởi libGL (trong tổng số 900MB sử dụng heap). Tôi giữ một lượng bộ nhớ tương tự trên card đồ họa, như VBO và Textures (chủ yếu là một kết cấu lớn 4096 * 4096).
Vì vậy, có vẻ như một lượng bộ nhớ tương tự như những gì tôi tải lên bộ nhớ GPU được phân bổ trên heap bởi libGL. Phân bổ libGL cũng cao nhất khi khối lượng VBO đạt đỉnh. Điều đó có bình thường không? Tôi nghĩ một trong những lợi ích của việc có rất nhiều bộ nhớ GPU là nó giữ RAM miễn phí?
bạn đã chỉ định mức sử dụng nào cho VBO trong 'glBufferData'? – KillianDS
Đối với phần lớn các VBO, đó là GL_STATIC_DRAW. Trong một trường hợp đó là GL_STREAM_DRAW, nhưng hành vi là như nhau ngay cả khi phần này của ứng dụng bị tắt. – pholz
@KillianDS không quan trọng, vì việc sử dụng chỉ là gợi ý, không bắt buộc. Ngoài ra OpenGL phải giữ một bản sao xung quanh vì nhiều lý do. – datenwolf