Грязные области текстуры (Direct3D 9)
Приложения могут оптимизировать копируемые подмножества текстуры, указав области "грязное" в текстурах. Только те регионы, помеченные как грязное, копируются вызовом IDirect3DDevice9::UpdateTexture. Однако грязное регионы могут быть расширены для оптимизации выравнивания. При создании текстуры вся текстура считается грязное. На грязное состояние текстуры влияют только следующие операции:
- Добавление области грязное к текстуре.
- Блокировка буфера в текстуре. Эта операция добавляет заблокированный регион в качестве грязное региона. Приложение может отключить это автоматическое обновление грязное региона, если оно лучше осведомлено о фактических грязное регионах.
- Использование уровня поверхности текстуры в качестве назначения в IDirect3Device9::UpdateSurface помечает всю текстуру как грязное.
- Использование текстуры в качестве источника в IDirect3DDevice9::UpdateTexture очищает все грязное области исходной текстуры.
- Использование IDirect3DSurface9::GetDC для возврата контекста устройства.
- Вызов IDirect3DBaseTexture9::GenerateMipSubLevels помечает всю текстуру как грязное.
- Вызов метода IDirect3DBaseTexture9::SetAutoGenFilterType помечает всю текстуру как грязное.
"Грязные" области задаются на верхнем уровне текстуры mipmapped, и IDirect3DDevice9::UpdateTexture может развернуть область грязное вниз по цепочке MIP, чтобы свести к минимуму количество байтов, скопированных для каждого подуровневого уровня. Обратите внимание, что координаты поверх грязное области округляются наружу, то есть их дробные части округляются к ближайшему краю текстуры.
Так как каждый тип текстуры имеет разные типы грязное областей, существуют методы для каждого типа текстуры. Объемные текстуры используют грязное прямоугольник, а текстуры объемов — прямоугольники.
- IDirect3DCubeTexture9::AddDirtyRect
- IDirect3DTexture9::AddDirtyRect
- IDirect3DVolumeTexture9::AddDirtyBox
Передача null для параметров pDirtyRect или pDirtyBox для указанных выше методов расширяет область грязное, чтобы охватить всю текстуру.
Каждый метод блокировки может принимать D3DLOCK_NO_DIRTY_UPDATE, что предотвращает любые изменения грязное состояния текстуры. Дополнительные сведения см. в разделе Блокировка ресурсов (Direct3D 9).
Если доступны дополнительные сведения о истинном наборе регионов, которые изменяются во время операции блокировки, приложения должны использовать D3DLOCK_NO_DIRTY_UPDATE. Обратите внимание, что блокировка или копирование только на поверх текстуры (т. е. без блокировки или копирования на верхний уровень) не обновляет грязное областей для этой текстуры. Приложения берут на себя ту же ответственность за обновление грязное регионов, когда они блокируют более низкие уровни, не блокируя верхний уровень.
Связанные темы