СырМан
И то и другое использовать можно, просто стоит иметь ввиду, что скорость будет несколько ниже. То есть для отдельных переменных имеет смысл всегда использовать Long, а для больших массивов уже важно экономить память, тут уже и Byte, и Integer годятся. Смотреть нужно по обстоятельствам, для переменной дескриптора файла можно и Integer применить, всё равно применение разовое, а вот для использования в многотысячном цикле уже желателен тип Long.
А, вот оно как. Ясно, спс
Mikle
Нашел!!! Жаль демки нет... Буду глядеть архитектуру...
Mikle
> Был такой iRender, но сырой очень
В смысле сырой?
И еще, что по твоему должен уметь 2D/3D игровой двиг?
max255
> что по твоему должен уметь 2D/3D игровой двиг?
Смотря под какие конкретно игры он заточен.
Для 3D автогонки или шутера нужно грузить ландшафт, желательно с ЛОДами, для авиасима ЛОДы уже просто необходимы, но не так важна, например, работа с тенями, в любом случае нужно грузить модели какого-нибудь распространённого формата, необходим инструментарий - редактор карт и т. п. Сделать универсальное очень сложно.
Mikle
> желательно с ЛОДами
Которые грузятся с диска или генерируются сами?
Лоды для ландшафта сгенерировать не сложно, для моделей - другое дело.
Mikle
Сейчас начал переписывать свой старый менеджер ресурсов. Хочу добавить туда свободное удаление и поиск по имени...
Так вот не могу определиться с алгоритмом удаления текстур...
Пока что вижу такой:
Существует два массива:
1)Хранит структуру текстуры (от 0 до количества всех текстур)
2)Обычный массив Long чисел, хранит информацию о свободных id = 0,1,2,3,4,5,6,7,8,9
ТЕ при загрузке новой текстуры, загрузчик найдет первое свободное место в массиве(сдесь это 2) и выдаст как свободное id для загрузки.
После чего загрузчик создаст новую текстуру и в ее структуру поместит ее id.
В случае обращения к текстуре простой цикл по всем текстурам.
В случае удаления перемещение всех текстур в первом массиве, и пометка во втором, что этот id теперь свободен.
>От поиска по имени отказался... Слишком долгий...
Можеш что нибудь посоветовать?
Не пойму, откуда цикл возникает при обращении к текстуре, зачем он там?
СырМан
> Не пойму, откуда цикл возникает при обращении к текстуре, зачем он там?
Вот моя структура текстуры
Public Type ServerTexture Texture As Direct3DTexture8 'текстура ID As Long 'ид SrcFile As String 'файл SrcHeight As Long 'высота SrcWidth As Long 'ширина End Type
В цикле я буду искать по ID.
ТЕ номер в массиве уже не будет соответствовать ID, например id = 1,2,3,6,7,8. А длинна массива будет = 6.
Такое произойдет после удаления текстур 4,5,9. Массив будет урезан и сдвинут.
Предлагаю после удаления текстур массив не урезать и не сдвигать. А при повторной записи в пустые места писать следующие id. Т.е. 1,2,3, , ,6,8, . (4,6,9 удалены) => 1,2,3,10,11,6,8,12 (10,11,12 сохранены) А для поиска создать двумерный динамический массив принимающий длину в зависимости от числа спрайтов. По нему определим соответствие элемента массива и id спрайта без всяких циклов.
СырМан
Я уже прорабатывал этот вариант... Хорош... Но если будеш постоянно заружать/выгружать после 4 294 967 295 загрузки все рухнет....
СырМан
> А для поиска создать двумерный динамический массив принимающий длину в
> зависимости от числа спрайтов.
А вот это идея! Спс!
Предпочитаю обходиться вообще без специальных хагрузчиков. Это пригодится, на мой взгляд, только в мегапроектах. У меня, на примере AoS2, так - каждый класс при создании экземпляра загружает свои текстуры, а так же шейдеры, сам; при уничтожении класса он их, соответственно, сам и уничтожает. Скайбокс и ландшафт у меня тоже сделаны классами, хотя, при желании, можно было сделать и простыми модулями, ведь у этих классов создаётся по одному экземпляру. У класса "машина" четыре экземпляра, но, чтобы не хранить четыре одинаковых модели, отдельно созданы объекты "кузов", "колесо", "фары" и т. п., в них и загружены соответствующие модели и шейдеры для их отображения, а класс "машина" хранит только индивидуальные свойства - координаты, скорость, цвет и т. п., из его метода Draw уже перевызываются Draw для отдельных частей.
Бывает, что одна текстура используется для отображения объектов разных классов, например текстура с тенями, тогда для неё тоже создаётся отдельный модуль или класс, как правило это оправданно - класс Shadow будет при своём создании будет создавать текстуру соответствующего размера в зависимости от заданной детализации, предоставлять через свойство эту текстуру для использования, содержать методы для работы с ней (например размытие).
Кстате, а одномерный массив может подойдёт. Пусть id соответствует номерам элементов одномерного массива, тогда положение в массиве с текстурами можно из одномерного массива извлеч так n=arrey(id). Рад что помог :)
Ы-хы - не актуально, пока писал, Mikle ответил :)
Тема в архиве.