Вообщем сделал так, чтобы в буфер вершин записывались только те стены, полы и потолки, которые можно увидеть. По идее, через некоторое время, когда герой протопает некоторое расстояние, нужно создавать буфер нового размера и заново его заполнять.
Делаю так (на DX9):
- Код: Выделить всё
VB = Nothing
VB = New Direct3D.VertexBuffer( ставлю новый размер )
'Lock, Unlock, вообщем заполняю
Но строка VB = Nothing не помогает и не очищает память.
По идее можно эту память освобождать при помощи комманды
- Код: Выделить всё
VB.Dispose()
Но в этом случае удаляется и сама переменная, которая в моем случае Private, то есть используется при всей работе программы. В принципе можно создавать каждый раз заново локальные переменные и таскать их с собой через всю программу аж до рендеринга, но мне эта мысль не понравилась.
Кстати, такой же глюк встречается в туториалах в SDK. Там при изменении размера окна так же создается новый буфер. Если открыть Task Manager и потаскать угол формы из туториала туда-сюда, то через совсем небольшые промежутки времени у вас будет сьедаться большие объемы памяти. Попробуйте.
Посмотрел обычные примеры в SDK. В них утечек памяти нет, но между перетаскиванием и рисованием картинки проходит довольно длительное время. Конечно я могу сделать, что вроде как мой герой, бегающий по лабиринту на каждом шаге обдумывает действия, пока создается новый буфер, но это не выход


Кто что может посоветовать по этому поводу? Предлагать создавать один буфер фиксированной длины в последнюю очередь. Кроме того после Alt+Tab все-равно прийдется его пересоздавать. Кто как делает?