Управление ресурсами (Direct3D 9)

Управление ресурсами — это процесс, в котором ресурсы передвигаются из хранилища системной памяти в хранилище, доступное для устройств, и удаляются из хранилища, доступного для устройств. Время выполнения Direct3D имеет собственный алгоритм управления на основе метода приоритета, который используется в последнее время. Direct3D переключается на метод приоритета, недавно использовавшийся, когда обнаруживает, что в одном кадре используется больше ресурсов, чем может сосуществовать в памяти, доступной для устройств, — между IDirect3DDevice9::BeginScene и IDirect3DDevice9::EndScene .

Используйте флаг D3DPOOL_DEFAULT во время создания, чтобы указать, что ресурс помещается в пул памяти, наиболее подходящий для набора используемых ресурсов, запрошенных для данного ресурса. Обычно это память видео, включая локальную память видео и ускоренную память графического порта (AGP). Ресурсы в пуле по умолчанию не сохраняются через переходы между потерянными и операционными состояниями устройства. Эти ресурсы необходимо освободить перед вызовом сброса, а затем повторно создать.

Используйте флаг D3DPOOL_MANAGED во время создания, чтобы указать управляемый ресурс. Управляемые ресурсы сохраняются через переходы между потерянными и операционными состояниями устройства. Эти ресурсы существуют как в видео, так и в системной памяти. Управляемый ресурс будет скопирован в память видео при необходимости во время отрисовки. Устройство можно восстановить с помощью вызова IDirect3DDevice9::Reset, и такие ресурсы продолжают работать нормально без перезагрузки с данными. Однако если устройство должно быть уничтожено и повторно создано, необходимо повторно создать все ресурсы.

Для ресурсов, изменяющихся с высокой частотой, не рекомендуется управлять ресурсами. Например, буферы вершин и индексов, которые используются для обхода графа сцены, каждый кадр отрисовки только геометрии, видимой пользователю, изменяет каждый кадр. Так как управляемые ресурсы поддерживаются системной памятью, постоянные изменения необходимо обновить в системной памяти, что может привести к серьезному снижению производительности. Для этого конкретного сценария следует использовать D3DPOOL_DEFAULT вместе с D3DUSAGE_DYNAMIC .

Другой пример, для которого управление ресурсами не рекомендуется (и явно не разрешено средой выполнения) — управление текстурой, созданной с помощью D3DUSAGE_RENDERTARGET. Если память, используемая целевыми объектами отрисовки, управлялась средой выполнения, ее содержимое должно постоянно копироваться в системную память во время отрисовки, что приводит к большим штрафам за производительность. По этой причине целевые объекты отрисовки должны быть созданы в пуле по умолчанию. Если требуется доступ КП к данным, содержащимся в целевом объекте отрисовки, эти данные необходимо скопировать в ресурс, созданный в D3DPOOL_SYSTEMMEM с помощью IDirect3Device9::UpdateTexture или IDirect3DDevice9::UpdateSurface

Дополнительные сведения об потерянном состоянии устройства см. в разделе "Потерянные устройства" (Direct3D 9).

Ресурсы Direct3D