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

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

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

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

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

Еще один пример, в котором управление ресурсами не рекомендуется (и явно не разрешено средой выполнения), — это управление текстурой, созданной с помощью D3DUSAGE _ рендертаржет. Если память, используемая объектами прорисовки, была управляться средой выполнения, ее содержимое будет постоянно копироваться в системную память во время подготовки к просмотру, что приведет к значительному снижению производительности. По этой причине целевые объекты рендеринга должны быть созданы в пуле по умолчанию. Если требуется доступ ЦП к данным, содержащимся в целевом объекте прорисовки, данные должны быть скопированы в ресурс, созданный в D3DPOOL _ системмем с помощью IDirect3DDevice9:: упдатетекстуреили IDirect3DDevice9:: упдатесурфаце

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

Ресурсы Direct3D