Майкл, а что если в игре будет много одинаковых объектов, придётся для них создавать класс с их текстурой? или я что-то не так понял
А блин же... невнимательно прочитал про тени, запутался
Если объекты одинаковы - достаточно создать один экземпляр и передавать ему позицию для рендера параметром. Если какую-то обычную текстуру используют экземпляры разных классов, или одного, но с разными другими ресурсами - можно загрузку и уничтожение подобных текстур вынести в отдельный модуль (один модуль для всех текстур, простых, не как тени).
Просто менеджер тестур - это круто и правильно, но требуется ли оно вам СЕЙЧАС? И не начнёте ли вы его переписывать , когда он действительно потребуется?
Mikle
Для удобства в DX8 мне нехватало некоторых методов в классе текстуры...
Например:
Draw
DrawRect
GetSize
GetSrcSize
CreateFromFile
и др плюшек. В результате у меня был свой тип текстуры который работал через менеджер...
Я думаю может добавить их в твой интерфейс Direct3DTexture9... Тогда и менеджер не нужен...
Mikle
> каждый класс при создании экземпляра загружает свои текстуры
Еще может быть ситуация загрузки одной текстуры двумя разными обьектами(3D сетками)
max255, у тебя не возникает проблем с утечкой памяти?
Странное дело, после перезагрузки моего грибного уровня, где-то на 5-30кб памяти съедается больше.
Это при том, что уровень то один и тот же...
В ИДЕ постоянно. Мне кажеться она память никогда не сбрасывает...
А в скомпилированном проекте все ок!
А у меня даже в скомпилированном утекает, причём первые килобайт 200 съедаются за 5-6 перезагрузок уровня, а потом медленнее. Иногда чучуть возвращает память, но потом опять догонает и перегоняет. Мистика!
СырМан
> килобайт 200
>_< ты жестоко играеш с массивами...
Думаю, что дело не в массивах. В старой версии тоже память пропадала (после перезагрузки уровня), а массивов там не было.
В SR2D память течь не должна вообще, даже если на удалять спрайты при завершении программы, я всегда рекомендую их удалять принудительно, чтобы не вырабатывать плохих привычек, в DirectX уже могут возникнуть проблемы.
Память может резервировать IDE для каких-то своих нужд, так же теоретически в SR2D возможны варианты, когда утекает память после остановки программы по ошибке, но после перезагрузки IDE всё восстановится.
Главное не использовать оператор End - это аварийное завершение. Нужно делать Unload всем формам и выходить из процедуры Main, если она является запускаемой.
Ни чего из перичисленного
А я использовал End...
В основном в таких случаях:
If core.Init(Me.HWnd, D3DFMT_A8R8G8B8, True, 1024, 768) = False Then Call MsgBox("Невозможно создать ядро!", vbCritical, "MXEngine") core.Destory End End If
Исправлю....
Причём, что удивительно, память пропадает рандомно. Либо не пропадает, либо пропадает на 5-40кб. И это происходит только после перезагрузки уровня! Даже специально перед перезагрузкой обнулил все массивы и переменные, не помогло. Используемую приложением память проверяю диспетчиром задач win7.
СырМан
Понял. Это нормально - сделай цикл и перезагрузи уровень 1000 раз, убедишься, что память не утекает, есть только эти флуктуации.
Попустил несколько циклов, вот результат
загрузка - 8332 кб
100 циклов - 9044 кб
200 циклов - 9112 кб
300 циклов - 9336 кб
400 циклов - 9732 кб
500 циклов - 10080 кб
600 циклов -10372 кб
Средний АП на 100 циклов - 340 кб
Теоретический милион циклов - 3328,4 мб
Тема в архиве.