Я визуализирую изображение, которое обновляется каждый кадр, делая его текстурой квадратной 2D-пластины (состоящей из 2 треугольников). Однако память графического процессора, кажется, монотонно увеличивается с каждым кадром.
prog = gloo.Program(vertex, fragment, count=4)
def Draw(self, inImRGB):
texture = inImRGB.copy().view(gloo.Texture2D)
texture.interpolation = gl.GL_LINEAR
CBackgroundImage._prog['texture'] = texture
CBackgroundImage._prog.draw(gl.GL_TRIANGLE_STRIP)
from glumpy import app
window = app.Window(...)
@window.event
def on_draw():
window.clear()
bgImageObj.Draw(newImRGB)
Любая идея, почему память графического процессора продолжает накапливаться? Должен ли я как-то освобождать текстуру в каждом новом кадре или заливать ее по-другому? Если да, то как?
Я использую команду nvidia-smi, и она отображает используемую память графического процессора.






texture = inImRGB.copy().view(gloo.Texture2D)
Создает и все новые текстуры; в конце концов Phython GC очистит старый материал, но этого не произойдет, если не будет нехватки памяти.
Создайте текстуру во время инициализации, а затем повторное использование.
Спасибо. Это сработало. Я инициализировал текстуру только один раз, используя команду texture = inImRGB.copy().view(gloo.Texture2D), а затем для каждого нового изображения я просто назначал изображение, не создавая новую текстуру, используя _prog['texture']= newImRGB и утечка памяти графического процессора остановлены!
@ roy111: Вам, вероятно, даже не нужно выполнять переназначение. Я не очень хорошо знаком с внутренностями Glumpy, но это выглядит как установка значения юниформ шейдерной программы, которое не меняется спонтанно. Поэтому, если вы не сделаете другое назначение той же программе/униформе где-то еще в своем коде, это тоже не должно измениться.
Я меняю текстуру каждый розыгрыш. На самом деле я использую его как экран: 2D-пластина (состоящая из 2 треугольников) — это пластина, а текстура — это видео, проецируемое на эту пластину, поэтому мне нужно обновлять текстуру новым видеокадром для каждого вызова отрисовки. .
@ roy111: Тогда вам могут мешать абстракции glumpy. Содержимое изображения текстуры OpenGL может быть обновлено без создания нового объекта текстуры. См. glTexSubImage2D — обновление изображений текстур с помощью этого механизма является предпочтительным методом реализации видеотекстур.
Откуда вы знаете, что память графического процессора увеличивается?