Автоматическое управление текстурами (Direct3D 9)
Управление текстурами — это процесс определения текстур, необходимых для отрисовки в данный момент времени, и обеспечения загрузки этих текстур в видеопамяти. Как и в случае с любым алгоритмом, схемы управления текстурами различаются по сложности, но любой подход к управлению текстурами включает в себя следующие ключевые задачи.
- Отслеживание объема доступной памяти текстуры.
- Вычисление текстур, необходимых для отрисовки, а каких нет.
- Определение того, какие существующие ресурсы текстуры можно перезагрузить с помощью другого изображения текстуры, а также какие поверхности следует уничтожить и заменить новыми ресурсами текстуры.
Direct3D реализует поддерживаемую системой систему систему управления текстурами, чтобы обеспечить загрузку текстур для обеспечения оптимальной производительности. Ресурсы текстур, которыми управляет Direct3D, называются управляемыми текстурами.
Диспетчер текстур отслеживает текстуры с помощью метки времени, которая определяет время последнего использования текстуры. Затем он использует алгоритм, который недавно использовался, чтобы определить, какие текстуры следует удалить. Приоритеты текстур используются в качестве разбиения связей, когда две текстуры предназначены для удаления из памяти. Если две текстуры имеют одинаковое значение приоритета, то наименее недавно использованная текстура удаляется. Однако если две текстуры имеют одинаковую метку времени, сначала удаляется текстура с более низким приоритетом.
Вы запрашиваете автоматическое управление текстурами для поверхностей текстур при их создании. Чтобы получить управляемую текстуру в приложении C++, создайте ресурс текстуры, вызвав метод IDirect3Device9::CreateTexture и указав D3DPOOL_MANAGED для параметра Pool. Вы не можете указать место создания текстуры. При создании управляемой текстуры нельзя использовать флаги D3DPOOL_DEFAULT или D3DPOOL_SYSTEMMEM. После создания управляемой текстуры можно вызвать метод IDirect3DDevice9::SetTexture , чтобы задать этап в каскаде текстуры устройства отрисовки.
Вы можете назначить приоритет управляемым текстурам, вызвав метод IDirect3DResource9::SetPriority для поверхности текстуры.
При необходимости Direct3D автоматически скачивает текстуры в видеопамять. Система может кэшировать управляемые текстуры в локальной или нелокальной видеопамять в зависимости от доступности нелокальной видеопамять или других факторов. Расположение кэша управляемых текстур не передается приложению, и эти сведения не требуются для использования автоматического управления текстурами. Если приложение использует больше текстур, чем может поместиться в видеопамяти, Direct3D удаляет старые текстуры из видеопамяти, чтобы освободить место для новых текстур. Если вы снова используете удаленную текстуру, система использует исходную поверхность текстуры системной памяти для перезагрузки текстуры в кэше видеопамять. Хотя перезагрузка текстуры необходима, она также снижает производительность приложения.
Вы можете динамически изменить исходную копию текстуры в системной памяти, обновив или заблокировав ресурс текстуры. Когда система обнаруживает грязное поверхности после завершения обновления или при разблокировке поверхности, диспетчер текстур автоматически обновляет копию текстуры с видеопамятью. Снижение производительности аналогично перезагрузке удаленной текстуры.
При вводе нового уровня в игре приложению может потребоваться очистить все управляемые текстуры из видеопамять (путем вызова IDirect3DDevice9::EvictManagedResources).
Дополнительные сведения об управлении ресурсами см. в разделе Управление ресурсами (Direct3D 9).
Связанные темы