Как запросить текущий статус памяти OpenGL PBO (всего/доступно на данный момент)? ⇐ C++
Как запросить текущий статус памяти OpenGL PBO (всего/доступно на данный момент)?
Я использую объекты пиксельного буфера 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) полезные функции для этого?
Я использую объекты пиксельного буфера 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) полезные функции для этого?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение