Как запросить текущий статус памяти OpenGL PBO (всего/доступно на данный момент)?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как запросить текущий статус памяти OpenGL PBO (всего/доступно на данный момент)?

Сообщение Anonymous »


Я использую объекты пиксельного буфера OpenGL (PBO / GL_PIXEL_UNPACK_BUFFER) для асинхронной загрузки данных из памяти ЦП в память ГП.

Я использую классический подход для быстрой загрузки данных с помощью PBO: я создаю GL_PIXEL_UNPACK_BUFFER, сопоставляю его, чтобы получить адрес в пространстве памяти ЦП, копирую свои данные в это место. Позже, когда рендереру потребуются данные, я добавляю PBO в свою текстуру OpenGL. Это работает очень хорошо и очень быстро. Я уверен, что моя реализация правильна, но дело здесь не в этом.

Насколько я понимаю, память PBO выделяется в выделенной области системной памяти. Эта область также называется «общая память графического процессора», и вы можете увидеть ее состояние, т.е. в диспетчере задач Windows.

Я столкнулся со следующей проблемой: я использую много PBO, и в какой-то момент «общая память графического процессора» заполнена, мое приложение аварийно завершает работу, а драйвер NVidia выдает ошибку нехватки памяти. Я не могу отловить эту ошибку с помощью glGetError() == GL_OUT_OF_MEMORY. Насколько я понимаю, это сообщение об ошибке не является надежным. Как я могу проверить размер общей/доступной на данный момент памяти PBO/общей памяти графического процессора? Я пока не нашел способа с OpenGL. Предлагают ли другие API-интерфейсы графических процессоров (DirectX, Vulkan, CUDA) полезные функции для этого?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»