Поделиться через


Блокировка ресурсов (Direct3D 9)

Блокировка ресурса означает предоставление ЦП доступа к его хранилищу. Для ресурсов определены следующие параметры блокировки:

  • D3DLOCK_DISCARD
  • D3DLOCK_READONLY
  • D3DLOCK_NOOVERWRITE
  • D3DLOCK_NOSYSLOCK
  • D3DLOCK_NO_DIRTY_UPDATE

Дополнительные сведения о флагах блокировки и их связи с конкретными ресурсами см. на справочных страницах по методам блокировки отдельных ресурсов. Разработчики приложений должны отметить, что флаги D3DLOCK_DISCARD, D3DLOCK_READONLY и D3DLOCK_NOOVERWRITE являются только подсказками. Время выполнения не проверка, что приложения следуют функциям, указанным в этих флагах. Приложение, указывающее D3DLOCK_READONLY а затем записывающее данные в ресурс, должно ожидать неопределенных результатов. Как правило, работа с флагами блокировки, включая флаги использования блокировки, не гарантируется в более поздних выпусках и может привести к значительному урону производительности.

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

Каждый интерфейс ресурсов имеет методы блокировки содержащихся буферов. Каждый ресурс текстуры также может блокировать часть этого ресурса. Объемные ресурсы (поверхности) позволяют блокировать вложенные прямоугольники, а ресурсы томов — блокировку вложенных томов или прямоугольников. Каждый метод блокировки возвращает структуру, содержащую указатель на хранилище, поддерживающее ресурс, и значения, представляющие расстояния между строками или плоскостями данных в зависимости от типа ресурса. Дополнительные сведения см. в списках методов для интерфейсов ресурсов. Возвращаемый указатель всегда указывает на левый верхний байт в заблокированных подотелах.

При работе с буферами индексов и вершин можно выполнять несколько вызовов блокировки; Однако необходимо убедиться, что количество вызовов блокировки совпадает с числом вызовов разблокировки.

DXTn хранит пиксели в блоках с кодировкой 4x4 и может быть заблокирован только на границах 4x4.

Ресурсы Direct3D